Django网址 - 让“更清洁”#?

时间:2018-05-10 08:32:10

标签: python django

您好我有一个django应用程序,我想知道在提交GET请求后是否有更好的方法来显示我的URL。

urlpatterns = [
    ...
    re_path(r'^reporting/$', ReportView.as_view(), name='report'),
]

当我到localhost:8000 /报告显示一个表单,然后单击一个单选按钮并提交时,它需要我:

http://localhost:8000/reporting/?run=2&submit=Search+for+run

我更喜欢它,如果它是:

http://localhost:8000/reporting/run=2/

因为此页面显示另一个表单,我想在其中添加'对此:

http://localhost:8000/reporting/run=2/choice=primary/

这是可能的 - 我是否必须有几个与不同视图相关的不同URL?

2 个答案:

答案 0 :(得分:3)

您可以通过输出表单中的隐藏字段来保留现有参数,而不是试图破坏这样的URL(我会挑战你的方式“更干净”),然后将其与可见的一起发送的:

<form method="GET">
  {% for key, value in request.GET.items %}
  <input type="hidden" name="{{ key }}" value="{{ value }}">
  {% endfor %}
  .. rest of form ..
</form>

答案 1 :(得分:1)

@ Daniel的回答是正确的。

但你问题的答案

Is this possible - would I have to have several different URLS relating to different views?

也是。

您的ReportView有点ListView。我想它会显示Report的所有列表。

然后,您可以从报告中生成DetailView - 每页显示一个报告对象。

应该是

http://localhost:8000/reporting/2/

而不是2,您可以添加任何您想要的内容(报告标题,找到slug) - 但它应该是独一无二的,所以我建议pk(id)或{{ 1}}。

对于制作slug,您必须制作视图(例如DetailView),添加网址以及制作视图模板。

您应该查看django detailview docs以获取更多信息。