Django URL - 让"更干净"?

  • 本文关键字:Django URL python django
  • 更新时间 :
  • 英文 :


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

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

当我到达显示表单的localhost:8000/reporting时,单击单选按钮并提交,它将带我到:

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?

与其尝试像那样破坏 URL(我会质疑您的方式"更干净"的断言(,您可以通过在表单中输出隐藏字段来保留现有参数,然后将这些字段与可见字段一起发送:

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

@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( 或slug.

对于 makeDetailView,您必须创建视图(如ReportDetailView(,添加 url 并制作视图模板。

你应该查看 django detailview 文档以获取更多信息。

最新更新