在 django 模板中显示查询字符串值

问题描述 投票:0回答:4

我想借助查询字符串将一些成功消息从 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/”并在那里打印结果。

请提出适当的解决方案。预先感谢。

python python-3.x django django-templates query-string
4个回答
39
投票

这些是默认的上下文处理器: 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)

1
投票

我不确定我是否理解这个问题,但您可以使用

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()
的调用(以及模板中的迭代)。


0
投票

对于 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”中

enter image description here


0
投票

自 Django 5.1 起,这由

querystring
模板标签自动处理。文档: https://docs.djangoproject.com/en/5.1/ref/templates/builtins/#querystring

© www.soinside.com 2019 - 2024. All rights reserved.