【发布时间】:2011-09-23 09:05:42
【问题描述】:
我想在我的网页中随处放置一个登录表单,所以我添加了一个context_processor 并将其包含在 base.html 文件中。现在的问题是我看不到表格。
这是我的 context_processors.py:
def global_login_form(request):
if request.method == 'POST':
formLogin = LoginForm(data=request.POST)
if formLogin.is_valid():
from django.contrib.auth import login
login(request, formLogin.get_user())
...
else:
formLogin = LoginForm()
return {'formLogin': formLogin}
这是我在 base.html 中尝试调用表单的不同 html:
<form action="/myapp/login/" method="post">
{% csrf_token %}
{{global_login_form}}
</form>
<form action="/myapp/login/" method="post">
{% csrf_token %}
{{global_login_form.as_p}}
</form>
<form action="/myapp/login/" method="post">
{% csrf_token %}
{{request.formLogin}}
</form>
我第一次加载页面时,context_process 返回{'formLogin': formLogin}(因为formLogin 是LoginForm())但是在检查 html 时我看不到表单。它不存在...但我可以看到 csrf_token 所以我认为我没有正确调用上下文。
只是大小写(可能顺序不对),这里是settings.py:
TEMPLATE_CONTEXT_PROCESSORS = (
"myapp.context_processors.global_login_form",
"django.core.context_processors.request",
"django.contrib.auth.context_processors.auth",
)
有什么想法吗?
【问题讨论】:
-
当您说“我的页面上的任何地方”时,您实际上是指“我的网站上的任何地方”,因为您希望登录表单出现在任何地方,以便用户可以在每个页面上登录?
-
没错,对不起我的英语
-
您可以发布处理帖子的视图吗?如果我正确理解了这个问题,那么问题是模板没有 POST 上下文,因此您无法在失败时预填表单?
标签: django forms login django-views django-templates