如何在 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&lt;color&gt;\\w)$'] 这是因为您的颜色参数 (\w) 的正则表达式 url 模式与提供的颜色参数 (#d4cbd0) 不匹配。您可以使用另一个正则表达式来匹配这样的颜色十六进制代码:gist.github.com/LunaCodeGirl/8746738

以上是关于如何在 django 中创建带参数的链接的主要内容,如果未能解决你的问题,请参考以下文章

在oracle中创建带参存储过程,传进去的参数可以为空么?在存储过程中要如何判断传进来的值是不是为空。

如何在 QOpenGLTexture 中创建带 alpha 的纹理?

如何在 Android 中创建带圆角的 ListView?

如何在 Oracle 12c 中创建带条件的索引?

如何在React MUI中创建带标签的TextField

如何在 Swift 4 的 UIView 中创建带圆角的渐变边框