我想借助查询字符串将一些成功消息从 get 方法打印回索引页(home.html),即模板页。我已使用
重定向到索引页面return HttpResponseRedirect("/mysite/q="+successfailure)
现在我想打印字符串 success 以及索引文件(或模板文件/ home.html 文件)中的其他内容。
我搜索了解决方案,发现“ django.core.context_processors.request context ”应该添加到设置中。但我没有找到添加的地方。我目前使用 python 2.7 和 django 1.4.3.
我也尝试过使用
render_to_response("home.html",{'q':successfailure})
但是,结果打印在当前页面(addContent.html-我不想要),但我想将网址发送到“/mysite/”并在那里打印结果。
请提出适当的解决方案。预先感谢。
这些是默认的上下文处理器: https://docs.djangoproject.com/en/dev/ref/templates/api/#using-requestcontext
TEMPLATES = [ {"OPTIONS": { "context_processors": [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
]}}]
如果它不在您的设置中,那么您还没有覆盖它。现在就这样做。
然后在你的模板中,像这样:
{% if request.GET.q %}<div>{{ request.GET.q }}</div>{% endif %}
另外,我注意到您的链接网址中没有使用查询字符串运算符,
?
。你应该是:
return HttpResponseRedirect("/mysite/?q="+successfailure)
我不确定我是否理解这个问题,但您可以使用
request.GET
访问视图中的查询字符串。
因此,您可以通过将 successfailure 变量添加到上下文中来调整呈现 home.html 的视图。类似的东西-
def home_view(request):
#....
successfailure = request.GET
return render(request, 'home.html', {'succsessfailure': successfailure.iteritems()})
然后迭代模板中的变量
{% for key, value in successfailure %}
<p>{{ key }} {{ value }}</p>
{% endfor %}
如果查询字符串中存在特定键,您可以使用
request.GET['your_key']
获取值,然后放弃对 iteritems()
的调用(以及模板中的迭代)。
对于 Django Templates,您最好使用 request.session["key"] 进行 session 重定向,如下所示,因为它更容易:
# "views.py"
from django.shortcuts import redirect
def my_view(request):
# Here
request.session["messages"] = {"success": "Success", "fail": "Fail"}
return redirect('/mysite')
# "home.html"
{{ request.session.messages.success }} {# Success #}
{{ request.session.messages.fail }} {# Fail #}
此外,对于Django Templates,您还可以使用几种类型的消息进行重定向,如下所示:
# "views.py"
from django.contrib import messages # Here
from django.shortcuts import redirect
def my_view(request):
messages.debug(request, 'This is debug')
messages.info(request, 'This is info')
messages.success(request, 'This is success')
messages.warning(request, 'This is warning')
messages.error(request, 'This is error')
return redirect("/mysite")
# "home.html"
{% load i18n static %}<!DOCTYPE html>
{% get_current_language as LANGUAGE_CODE %}{% get_current_language_bidi as LANGUAGE_BIDI %}
<html lang="{{ LANGUAGE_CODE|default:"en-us" }}" {% if LANGUAGE_BIDI %}dir="rtl"{% endif %}>
<head>
<title>{% block title %}{% endblock %}</title>
<link rel="stylesheet" type="text/css" href="{% block stylesheet %}{% static "admin/css/base.css" %}{% endblock %}">
</head>
{% load i18n %}
<body class="{% if is_popup %}popup {% endif %}{% block bodyclass %}{% endblock %}"
data-admin-utc-offset="{% now "Z" %}">
{% if messages %}
<ul class="messagelist">{% for message in messages %}
<li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message|capfirst }}</li>
{% endfor %}</ul>
{% endif %}
</body>
</html>
但是,我不知道为什么只有“调试”消息不显示,即使“DEBUG = True”在“settings.py”中:
自 Django 5.1 起,这由
querystring
模板标签自动处理。文档:
https://docs.djangoproject.com/en/5.1/ref/templates/builtins/#querystring