如何在 django 中创建带参数的链接
Posted
技术标签:
【中文标题】如何在 django 中创建带参数的链接【英文标题】:How to create a link with parameter in django 【发布时间】:2018-04-27 16:29:25 【问题描述】:您好,我正在尝试使用参数创建链接,但出现错误(找不到页面)
错误
Reverse for 'hexcode' with arguments '('#d4cbd0',)' not found. 1 pattern(s) tried: ['hexcode/(?P<color>\\w)$']
模板
% for color in palette_dominant_color %
<a href="% url 'brandcolors:hexcode' color %" style="text-decoration:none;color:inherit">
color
</a>
<br>
% endfor %
urls.py
url(r'^hexcode/(?P<color>\w)/$', ThemeView.as_view(), name="hexcode"),
views.py
class ThemeView(TemplateView):
template_name='fabric/theme.html'
def get_context_data(self, **kwargs):
context = super(ThemeView, self).get_context_data(**kwargs)
colors = Color.objects.filter(color=kwargs['color']).all()
return context
【问题讨论】:
how to add url parameters to django template url tag的可能重复 顺便说一句,你的上下文没有添加你需要设置context['colors'] = Color....
请注意,尝试在 URL 中包含 #
可能会导致问题,因为它用于 fragment identifiers。反转 URL 就可以了,因为 Django 会将哈希编码为%23
。但是,如果您的用户尝试使用 URL /hexcode/#d4cbd0
,那么他们的浏览器将剥离锚点,仅将 /hexcode/
发送到服务器。
【参考方案1】:
您的正则表达式需要一个字母数字字符,而不是后面跟着多个字符的哈希。
【讨论】:
【参考方案2】:您的链接应该是:
<a href="% url 'brandcolors:hexcode' color=color %" style="text-decoration:none;color:inherit">color</a>
【讨论】:
谢谢#clément,但我仍然遇到此错误Reverse for 'hexcode' with keyword arguments ''color': '#d4cbd0'' not found. 1 pattern(s) tried: ['hexcode/(?P<color>\\w)$']
这是因为您的颜色参数 (\w
) 的正则表达式 url 模式与提供的颜色参数 (#d4cbd0
) 不匹配。您可以使用另一个正则表达式来匹配这样的颜色十六进制代码:gist.github.com/LunaCodeGirl/8746738以上是关于如何在 django 中创建带参数的链接的主要内容,如果未能解决你的问题,请参考以下文章
在oracle中创建带参存储过程,传进去的参数可以为空么?在存储过程中要如何判断传进来的值是不是为空。