我计划创建一个带有更改元素的侧边栏(取决于当前的URL和身份验证状态).
例如:默认侧栏显示登录和标签云.
/tagcloud,我想将其隐藏在侧边栏中.实际上,我需要一种能让我在视图中做这样的事情的方法:
def some_view(request):
if request.user.is_authenticated():
sidebar.remove('login')
sidebar.add('user_menu')
def tag_cloud(request):
sidebar.remove('tag_cloud')
Run Code Online (Sandbox Code Playgroud)
之后,我想将sidebar(隐式地,不通过它render_to_response)传递给我想要做的事情的模板:
<div id="sidebar">
{{ sidebar }}
</div>
Run Code Online (Sandbox Code Playgroud)
这可能吗?
你最好在context_processors.py文件中执行此操作
这也意味着在返回视图时必须使用RequestContext
def include_tagcloud(request):
if request.path == '/tagcould/':
tagcloud = Tags.objects.filter(active=True) #whatever
return {'tagcloud': tagcloud}
def include_login(request):
if request.user.is_authenticated():
loginform = MyLoginForm(request.POST)
#passing a Django form + POST data in the case of re-submit
return {'loginform' : loginform}
Run Code Online (Sandbox Code Playgroud)
然后在你的模板中:
{% if loginform %}
<form action="accounts/login/">
{{form.as_p}}
<input type="submit" name="Login">
</form>
{% endif %}
{% if tagcloud %}
{%for tag in tagcloud %}.....{%for}
{% endif %}
Run Code Online (Sandbox Code Playgroud)
在这个例子中,登录表单指向一个固定的视图,
如果你想在每个视图上捕获登录表单的帖子,我不知道该怎么做
编辑:如果您不使用Django的CSRF功能,您只需在基本模板中插入登录表单,而无需使用任何django表单并指向登录视图:
{% if user.is_authenticated %}
<form action="accounts/login/">
<input type="text" name="username"><input type="password" name="password">
<input type="submit" name="Login">
</form>
{% endif %}
Run Code Online (Sandbox Code Playgroud)