python - url django 中渲染的 slugs 不正确

标签 python django python-3.x django-models django-forms

为什么我总是有多余的%2F在我生成的 slugs url 中?

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

某处出了问题,但我似乎无法发现它

在我看来,我正在使用 <a href = "{{ group.get_absolute_url }}">...得到蛞蝓。现在,这可以工作,但会输出上述问题。如果我这样做href = "{% url 'group' group.slug %}这会引发无法找到反向匹配的错误。

示例:群组标题为 a group网址将为 ../%2Fgroup/a-group/

在 urls.py 中

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

型号

class BlogGroup(models.Model):

    title = BleachField()
    image = models.ImageField(upload_to="uploads/group_images", default="uploads/group_images/none/none.jpg")
    created = models.DateTimeField(default = datetime.now)
    slug = models.SlugField(unique = True)

    def __str__(self):

        return self.title 

    def get_absolute_url(self):
        return reverse("blog.views.group", kwargs = {'slug':self.slug})

表格

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)

utils.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

最佳答案

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

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

请注意,我也有

  • 删除了 \d,因为 \w 已包含数字 0-9
  • 使用url()(Django 1.8+ 的最佳实践)并命名 url 模式。这有望使使用 {% url %} 标记反转 url 起作用。不过,在模板中使用 group.get_absolute_url 就可以了,如果您不想,则无需使用 url 标记。

关于python - url django 中渲染的 slugs 不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32288025/

相关文章:

python 名称错误: global name is not defined

python - 是否可以将flask_socketio与connexion一起使用?

python-3.x - 如何点击被其他元素覆盖的链接? Python 3.6 和 Selenium

python - Matplotlib - 为黑色背景演示幻灯片创建绘图

python - 如何使用pyspark将bz2文件读入数据帧?

python - 部署成功后,Azure Function App 运行旧代码

python-3.x - 检查 pandas 数据框中是否存在特定单词

python - Django lighttpd FCGI 错误

python - 有什么方法可以将自定义/调试消息添加到 python/django unittest.TestCase 的失败测试方法的详细信息中?

python-3.x - 在 python 中即时编译字符串函数?