我有一个基本模板,其中包含页眉,页脚和块"内容"然后我在不同的CBV中覆盖。
用户空间很少" div
在标题内,我希望在用户登录时保留用户的信息,如果他是来宾则保留登录表单。
现在想到的唯一方法是创建一个django应用程序并将其用作标记。但我认为有一个更好的解决方案。因为据我所知,标签可以在将来放慢django项目的速度。
另外我想也许我想从渲染子模板的视图中操纵这个div
。例如,我在页面上计算并显示一些值,但我也想在"用户空间"中显示它。 div
也是如此。我认为这可以通过将数据推送到用户的会话然后在渲染"用户空间"来自其他代码的div
。
答案 0 :(得分:3)
假设django.contrib.auth.user
中有INSTALLED_APPS
,您可以使用user.is_authenticated()
访问用户的登录状态:
{% if user.is_authenticated %}
<div>Welcome back, {{ user.username }} | <a href='/logout/'>Logout</a></div>
{% else %}
<div>
<form action='/login/' method='POST'>
{{ csrf_token }}
{{ login_form }}
<input type='submit'>
</form>
</div>
{% endif %}
修改强>:
回应你的评论:
假设客户端执行POST请求,我们通过该请求计算一些数字 - 总价格。我需要在那个div中显示它。
定义您的观点:
from django.shortcuts import render
from .forms import MyForm
def simple_view(request):
if request.method == 'POST':
# create a form instance and populate it with data from the request:
form = MyForm(request.POST)
# check whether it's valid:
if form.is_valid():
# process the data in form.cleaned_data as required
result = form.cleaned_data['some_input'] * 50
return render(request, 'my_template.html', {'result': result})
# if a GET (or any other method) we'll create a blank form
else:
form = MyForm()
return render(request, 'my_other_template.html', {'form': form})
在模板中显示result
:
<!-- my_template.html -->
<div>{{ result }}</div>
也许你需要对你的问题更具体,这是我认为你正在寻找的。您应该将您描述的逻辑放入视图中,而不是模板。