Переменная django доступна для всех представлений - PullRequest
1 голос
/ 16 апреля 2019

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

Джанго: 2,2 Python: 3.5.3

.

Ответы [ 2 ]

1 голос
/ 16 апреля 2019

Возможно, вы захотите внедрить пользовательское промежуточное ПО.

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

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

0 голосов
/ 16 апреля 2019

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

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)
...