嗨,我有一个 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 文档以获取更多信息。