Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在URL.py的direct_to_模板或简单视图中提供会话数据(无需创建应用程序)_Python_Django - Fatal编程技术网

Python 如何在URL.py的direct_to_模板或简单视图中提供会话数据(无需创建应用程序)

Python 如何在URL.py的direct_to_模板或简单视图中提供会话数据(无需创建应用程序),python,django,Python,Django,我在一个网站上工作,其中许多页面不需要任何逻辑,通过URL.py中的direct_to_模板呈现,如下所示: url('^support/slp/$', direct_to_template, { 'template': 'pages_fixed/support/support_slp.html', 'extra_context': { 'questions': Question.objects.filter(show_slp=T

我在一个网站上工作,其中许多页面不需要任何逻辑,通过URL.py中的direct_to_模板呈现,如下所示:

url('^support/slp/$',
    direct_to_template, {
        'template': 'pages_fixed/support/support_slp.html',
        'extra_context': {
            'questions':  Question.objects.filter(show_slp=True).order_by('seq_num'),
            'user_state': request.session['user_state'],   # <-- tried adding, no go
        }
    },
    name='support'
),
url(“^support/slp/$”,
直接到模板{
“模板”:“pages_fixed/support/support_slp.html”,
“额外上下文”:{
'questions':Question.objects.filter(show_slp=True)。order_by('seq_num'),

“用户状态”:请求。会话[“用户状态”],#这可以很容易地在自定义模板标记中完成。包含和分配标记可以选择性地接受现有上下文,如果您激活了请求上下文处理器,则其中包括请求。您可以使用该上下文处理器访问会话。

您可以使用自定义上下文处理器将您需要的任何内容输入到会话的上下文中假设您将此代码放在package\u name/context\u processors.py中

def session_data(request):
    return {
        'user_state': request.session['user_state'],
    }
您可以在设置文件的
TEMPLATE\u context\u PROCESSORS
中指定此上下文处理器:

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.contrib.auth.context_processors.auth',
    'django.core.context_processors.request',
    'django.core.context_processors.debug',
    'django.core.context_processors.i18n',
    'django.core.context_processors.media',
    'django.core.context_processors.static',
    'django.core.context_processors.tz',
    'django.contrib.messages.context_processors.messages',
    'package_name.context_processors.user_data')

有关上下文处理器的更多文档可用

现在是您开始使用的时候了,它将自动传递到请求上下文中,从而使会话数据在模板中可用

您必须启用模板,该模板将在模板级别为您提供一个
{{request}
变量

下面是一个示例,使用:


support\u slp.html
模板中,您将有一个
object\u list
变量,该变量将作为查询集的结果,您可以使用
{{request.session.user\u state}
在模板中。

谢谢。听起来像是我需要的,但在自定义标记方面没有做太多。有没有可能得到一个例子?我在应用程序中使用基于类的视图,但我希望不必为这个项目中的所有这些旧页面创建新的Django应用程序。正如我所说的,它们有很多。我将探讨这些其他答案但如果我不破解它,最终可能会这么做..这不是创建任何应用程序,那么问题是什么?好的,上面的ListView示例需要进入某些“应用程序”中的一些views.py文件,不是吗?我指的这些页面没有关联的应用程序--它们只是模板,直接从URL.py呈现。请澄清一下?这些代码都在URL.py中,而不是在某些视图中。我粘贴的代码正是您需要的代码;没有任何视图。天啊,确实如此。我不知道request.session是这样提供的(已经在我的模板\u上下文\u处理器中启用)。谢谢!
from django.conf.urls import patterns
from django.views.generic.list import ListView

urlpatterns = patterns('',
    (r'^support/slp/$',
        ListView.as_view(template_name="pages_fixed/support/support_slp.html",
                         queryset=Question.objects.filter(show_slp=True).order_by('seq_num')),
)