我想在网页的任何地方都放一个登录表单,所以我添加了一个 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",
)
有任何想法吗?
最佳答案
我相信 OP 错误地假设模板上下文变量将匹配上下文处理器的函数名称。
OP 的上下文处理器 global_login_form()
注入(inject) formLogin
到模板上下文。因此,在模板中,应将表单引用为,例如 {{ formLogin.as_p }}
.
关于Django - 使用 context_processor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6491046/