0

我有两个共享一个包含标签的 url,在包含标签内我有另一个显示表单的 url,这个表单重定向到两个 url 之一。我怎样才能使这个重定向动态?例如,如果表单在 url_1 重定向到 url_1,如果它在 url_2 重定向到 url_2?

这是我的代码以获得更好的解释(希望如此):

表单.html

# This form lives inside of an inclusion tag, so many urls could display it
<form method="POST" action={% url cv_toggle %}>
    <input type="hidden" name="c_id" value={{ c.id }}>
    ...
    {% csrf_token %}
</form>

视图.py

# corresponds to name="cv_toggle" as a url
def toggle_vote(request):
    ...
    next = reverse("frontpage") # this url should redirect to the current
                                # url requested, and not just "frontpage"
    return HttpResponseRedirect(next)
4

1 回答 1

1

您可以使用请求对象来确定当前 URL,如下所示:

<form method="POST" action="...">
    <input type="hidden" name="next" value="{{ request.get_full_path }}">
    ...
    {% csrf_token %}
</form>

看法:

from django.utils.http import is_safe_url

def toggle_vote(request):
    ...
    next_url = request.POST.get('next')

    if not next_url or not is_safe_url(url=next_url, host=request.get_host()):
        next_url = reverse('frontpage')
    return HttpResponseRedirect(next_url)

Django 登录表单使用此类next字段来确定登录后将用户重定向到哪里。您也可以将此 URL 存储为 GET 参数而不是 POST,或者您可以同时使用这两个参数以获得更好的灵活性和更轻松的测试。

于 2013-09-03T18:33:51.630 回答