如果我在Django中设置会话变量,例如:
request.session["name"] = "name"
Run Code Online (Sandbox Code Playgroud)
有没有办法可以在模板中访问它,或者我是否必须从视图中检索它,然后将其传递给模板?
问,因为我有大约10个小会话变量,我想在模板中访问,并将所有10个从视图传递到模板可能会有点乱.
(我必须使用会话变量,因为它是一个HttpResponseRedirect,但是为了我的目的,将变量存储在数据库中是过度的.)
那么 - 任何直接在模板中获取会话变量的方法?
在我的视图函数中,我想调用另一个视图并将数据传递给它:
return redirect('some-view-name', backend, form.cleaned_data)
Run Code Online (Sandbox Code Playgroud)
,其中后端是registration.backends对象,而form.cleaned_data是表单数据的字典(但必须以*args或**kwargs的形式发送,以防止Don't mix *args and **kwargs in call to reverse()!出现错误).从我在文档中找到的内容:
def my_view(request):
...
return redirect('some-view-name', foo='bar')
Run Code Online (Sandbox Code Playgroud)
看起来我需要提供'some-view-name'参数,但它只是视图函数的名称,还是url的名称?所以我想使它类似于在django-registration中完成的方式,其中:
to, args, kwargs = backend.post_registration_redirect(request, new_user)
return redirect(to, *args, **kwargs)
def post_registration_redirect(self, request, user):
return ('registration_complete', (), {})
Run Code Online (Sandbox Code Playgroud)
好的,我现在可以直接调用我的视图功能,还是需要提供一个网址?更重要的是,我的funciotn调用(以及需要时的URL)应该是什么样的?后端和cleaning_data都只是通过此视图传递以供以后使用.我试过这个,但不合适:
url(r'^link/$', some-view-name)
def some-view-name(request, *args):
Run Code Online (Sandbox Code Playgroud)
除此之外:
return redirect('some_url', backend=backend, dataform.cleaned_data)
url(r'^link/$', some-view-name)
def some-view-name(request, backend, data):
Run Code Online (Sandbox Code Playgroud)
还是NoReverseMatch.但是在django-registration中,我看到过这样的事情:
url(r'^register/$',register,{'backend': 'registration.backends.default.DefaultBackend'}, name='registration_register'),
def register(request, backend, success_url=None, form_class=None,
disallowed_url='registration_disallowed',
template_name='user/login_logout_register/registration_form.html',
extra_context=None):
Run Code Online (Sandbox Code Playgroud)