在url djang中呈现的段塞不正确

2024-10-01 04:44:30 发布

您现在位置:Python中文网/ 问答频道 /正文

为什么在我生成的slugs url中总是有一个额外的%2F?在

当我在终端中打印出来时,下面所有的slug都生成正确,但是我不知道为什么url有额外的%2F

某处出了什么事,但我似乎找不到

在我看来,我是用<a href = "{{ group.get_absolute_url }}">...来获取slug。现在,这是可行的,但输出上述问题。如果我这样做href = "{% url 'group' group.slug %}这会抛出一个错误,即找不到反向匹配。在

示例:组的标题是a group,url将是../%2Fgroup/a-group/

在网址.py在

 (r'^/group/(?P<slug>[-\w\d]+)/$', "group"),

型号

^{pr2}$

形式

class BlogGroupForm(forms.ModelForm):


    def __init__(self, *args, **kwargs):

        super(BlogGroupForm, self).__init__(*args, **kwargs)
        self.fields["title"].requried = True
        self.fields["image"].required = True
        self.fields["title"].widget = forms.TextInput()

    class Meta:
        model = BlogGroup
        fields = ["title", "image", "slug"]

    def save(self, commit = False):

        instance = super(BlogGroupForm, self).save(commit = False)
        return truncate_slug(instance, BlogGroup)

在实用工具.py在

from django.utils.text import slugify
import itertools

def truncate_slug(instance, arg):

    length = arg._meta.get_field('slug').max_length
    instance.slug = original_slug = slugify(instance.title)[:length]

    for x in itertools.count(1):
        if not arg.objects.filter(slug = instance.slug).exists():
            break
        instance.slug = "%s-%d" % (original_slug[:length - len(str(x)) -1], x)
    instance.save()
    return instance

Tags: instancepyselfurlfieldsgettitlesave
1条回答
网友
1楼 · 发布于 2024-10-01 04:44:30

正则表达式的开头有一个正斜杠。如果删除它,它应该阻止%2f(注意,%2f是一个url编码的正斜杠)。在

url(r'^group/(?P<slug>[-\w]+)/$', "group", name="group"),

请注意,我也

  • 删除\d,因为\w已经包含数字0-9
  • 使用url()(django1.8+的最佳实践)并命名了url模式。希望这样可以使用{% url %}标记反转url。在模板中使用group.get_absolute_url是可以的,如果你不想的话,就不需要使用url标记。在

相关问题 更多 >