gpt4 book ai didi

python - 呈现的 slug 在 url django 中不正确

转载 作者:行者123 更新时间:2023-11-28 21:50:08 25 4
gpt4 key购买 nike

为什么我总是多一个%2F在我生成的 slug url 中?

当我在终端中打印出来时,所有的 slug 都在下面正确生成,但我不知道为什么 url 有额外的 %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)

实用程序.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 - 呈现的 slug 在 url django 中不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32288025/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com