在CreateView中获取参数

时间:2016-02-10 11:41:24

标签: python django

我经常使用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,而不是下一个参数。

1 个答案:

答案 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>