С context_processors легко определить вызываемый объект, который приводит к переменным, доступным для всех шаблонов. Есть ли подобный метод, который делает переменную доступной для всех представлений? Это как-то возможно? Может быть, с некоторым решением?

Джанго: 2.2 Питон: 3.5.3

.

2
user2194805 16 Апр 2019 в 00:26

2 ответа

Лучший ответ

Вы можете захотеть реализовать пользовательское Middleware.

https://docs.djangoproject.com/en/dev/topics/http/middleware/

Это позволяет вам выполнять пользовательский код для каждого запроса и прикреплять результаты к объекту request, который затем становится доступным в вашем представлении.

1
ModestLeech 16 Апр 2019 в 06:14

Вы можете попробовать отправить свою переменную в контекст каждого представления, основанного на классе, имея родительский класс и наследуя все представления от этого.

class MyMixin(object):
    def get_context_data(self, **kwargs):
        context = super(MyMixin, self).get_context_data(**kwargs)
        myvariable = "myvariable"
        context['variable'] = myvariable
        return context

# then you can inherit any kind of view from this class.

class MyListView(MyMixin, ListView):
    def get_context_data(self, **kwargs):
        context = super(MyListView, self).get_context_data(**kwargs)
        ...  #additions to context(if any)
        return context

Или, если вы используете представления на основе функций, вы можете использовать отдельную функцию, которая может обновлять ваш контекст dict.

def update_context(context):  #you can pass the request object here if you need
    myvariable = "myvariable"
    context.update({"myvariable": myvariable})
    return context

def myrequest(request):
    ...
    context = {
        'blah': blah
    }
    new_context = update_context(context)
    return render(request, "app/index.html", new_context)
0
Aman Garg 16 Апр 2019 в 06:03