如何在 HTML 模板中访问 Django URL 参数 /<thing>/?

Posted

技术标签:

【中文标题】如何在 HTML 模板中访问 Django URL 参数 /<thing>/?【英文标题】:How do I access Django URL parameter /<thing>/ in HTML template? 【发布时间】:2020-04-26 12:05:05 【问题描述】:
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^', include('Homepage.urls')),
url(r'^RepairLog/', include('RepairLog.urls')),
url(r'^RepairLog/DMRView/', TemplateView.as_view(template_name="RepairLog/DMRView.html"),name="dmr view"),
url(r'^RepairLog/DMRtab/', TemplateView.as_view(template_name="RepairLog/DMRtab.html"),name="dmrtab"),
url(r'^RepairLog/DMRwork/', TemplateView.as_view(template_name="RepairLog/DMRwork.html"),name="dmrwork"),
url(r'^Inventory/', include('Inventory.urls')),
url(r'^Inventory/inventory/<barcodething>/', TemplateView.as_view(template_name="Inventory/inventory.html"),name="inventory"),
url(r'^Inventory/inventory/', TemplateView.as_view(template_name="Inventory/inventory.html"),name="inventory"),
url(r'^Inventory/createitem/', TemplateView.as_view(template_name="Inventory/createItem.html"),name="createitem"),
url(r'^Inventory/manageitem/', TemplateView.as_view(template_name="Inventory/manageItem.html"),name="manageitem"),
url('accounts/', include('django.contrib.auth.urls')),] ##Necessary to login validation

我正在尝试访问我的 inventory.html 模板中的 barcodething。 我试过barcodething 但这不起作用。 我使用的 URL 是 http://127.0.0.1:8000/Inventory/inventory/123456789/ 应该通过 barcodething=123456789

如果我删除url(r'^Inventory/inventory/', TemplateView.as_view(template_name="Inventory/inventory.html"),name="inventory"), 或将其更改为: url(r'^Inventory/inventory/**$**', TemplateView.as_view(template_name="Inventory/inventory.html"),name="inventory"),

然后意外出现此错误,这可能有助于确定根本原因:

`

 Using the URLconf defined in MT.urls, Django tried these URL patterns, in this order:

    ^admin/
    ^ ^homepage/ [name='homepage']
^RepairLog/
^RepairLog/DMRView/ [name='dmr view']
^RepairLog/DMRtab/ [name='dmrtab']
^RepairLog/DMRwork/ [name='dmrwork']
^Inventory/ ^items/$ [name='item-list']
^Inventory/ ^items\.(?P<format>[a-z0-9]+)/?$ [name='item-list']
^Inventory/ ^items/(?P<pk>[^/.]+)/$ [name='item-detail']
^Inventory/ ^items/(?P<pk>[^/.]+)\.(?P<format>[a-z0-9]+)/?$ [name='item-detail']
^Inventory/ ^itemreorder/$ [name='item-list']
^Inventory/ ^itemreorder\.(?P<format>[a-z0-9]+)/?$ [name='item-list']
^Inventory/ ^itemreorder/(?P<pk>[^/.]+)/$ [name='item-detail']
^Inventory/ ^itemreorder/(?P<pk>[^/.]+)\.(?P<format>[a-z0-9]+)/?$ [name='item-detail']
^Inventory/ ^$ [name='api-root']
^Inventory/ ^\.(?P<format>[a-z0-9]+)/?$ [name='api-root']
^Inventory/inventory/<barcodething>/$ [name='inventory']
^Inventory/createitem/ [name='createitem']
^Inventory/manageitem/ [name='manageitem']
accounts/
The current path, Inventory/inventory/1/, didn't match any of these.`

解决方案: 改变 url(r'^Inventory/inventory/&lt;barcodething&gt;/', TemplateView.as_view(template_name="Inventory/inventory.html"),name="inventory"),

到: url(r'^Inventory/inventory/(?P&lt;barcodething&gt;[\w-]+)/', TemplateView.as_view(template_name="Inventory/inventory.html"),name="inventory"),

【问题讨论】:

【参考方案1】:

你可以这样访问它:

 view.kwargs.barcodething 

这里有更详细的答案: https://***.com/a/45099100/11449888

【讨论】:

嗨 HelenShy,我试过了,但它没有为我提供任何信息。我也试过 request.resolver_match.kwargs.barcodething 还有 self.kwargs.barcodething 甚至 barcodething我一定是遗漏了什么。 如果我删除 url(r'^Inventory/inventory/', TemplateView.as_view(template_name="Inventory/inventory.html"),name="inventory"), code (或在正则表达式的末尾添加 $ )然后 Django 找不到路径。我想这可能是根本原因。 `请求方法:GET 请求 URL:127.0.0.1:8000/Inventory/inventory/1 使用 MT.urls 中定义的 URLconf,Django 按以下顺序尝试了这些 URL 模式:当前路径 Inventory/inventory/1/ 与其中任何一个都不匹配。 您是否尝试过更改 url 中的定义? r'^Inventory/inventory/?P[\w-]+)/ 优秀的@HelenShy! r'^Inventory/inventory/**(**?P&lt;barcodething&gt;[\w-]+)/ 在我的模板中与barcodething 一起工作!! 恭喜!)) 在 url 中定义 slug 时需要使用正则表达式...【参考方案2】:

您还可以使用 django 的 url template tag 访问 URL 和匹配模式

% url 'name_of_url_defined_in_pattern' &lt;pattern&gt; %

【讨论】:

以上是关于如何在 HTML 模板中访问 Django URL 参数 /<thing>/?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 模板中获取当前 URL?

如何在 Django 模板中获取当前 URL?

url django模板的动态参数

在 Django 中,如何使用模板和 DB 对象中使用的动态 URL 实现样板 HTML 变量?

如何使用 Django 模板在 HTML 表单操作中向“current_url”/submit 提交 POST 请求?

django的views直接传一段html代码调用模板中的js函数。