我经常使用url中next参数的解决方案来选择UpdateView的重定向,类似:
.../tap/update/?next=/users/profile
使用网址class SingleProductCreateView(CreateView):
model = SingleProduct
fields = ['name', 'description', 'price', 'shop']
template_name = 'shops/singleproduct_create.html'
success_url = '/shops/singleproduct/'
def get_success_url(self):
return force_text(self.request.POST.get('next', self.success_url))
非常有效。
但是,我尝试为CreateView做同样的事情,但它不起作用...... 似乎def没有收到任何GET或POST参数。
例如在这个观点上:
url(r'^singleproduct/create/$', SingleProductCreateView.as_view(), name='url_create_singleproduct'),
url.py:
shops/singleproduct_create.html
模板{% extends 'base.html' %}
{% block content %}
<form action= "{% url 'url_create_singleproduct' %}" method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit"/>
</form>
{% endblock %}
:
...
<a href="{% url 'url_create_singleproduct' %}?next=/shops/foyer/workboard">Add a product</a>
...
带有网址的模板:
success_url = '/shops/singleproduct/'
结果始终是%250D%250A%250D%250A
,而不是下一个参数。
答案 0 :(得分:0)
问题是您尝试访问request.POST的next
密钥,但该密钥位于request.GET
TapUpdateView.get_success_url
方法中。
如果您要从
替换SingleProductCreateView.get_success_url
,以防万一
def get_success_url(self):
return force_text(self.request.POST.get('next', self.success_url))
到
def get_success_url(self):
return force_text(self.request.GET.get('next', self.success_url))
一切都会按预期运作。
如果您希望访问next
中的request.POST
密钥,则必须使用action="your view"
,method="POST"
创建表单并附加隐藏的输入,如下面的代码段所示:
<form method="POST" action="{% url 'url_create_singleproduct' %}">
<input type=hidden name="next" value="/shops/foyer/workboard" />
<button type="submit">Go to your page</button>
</form>