呈现的子弹在URL Django中不正确
问题内容:
为什么我%2F
在生成的条形网址中总是有多余的内容?
当我在终端中将它们打印出来时,所有子弹都在下面正确生成,但是我不知道为什么该URL有多余的 %2F
某处有问题,但我似乎无法发现它
在我看来,我正在使用<a href = "{{ group.get_absolute_url }}">...
the。现在,这可行,但会输出上述问题。如果我这样做href = "{% url 'group' group.slug %}
会引发一个错误,那就是找不到反向匹配。
示例:组的标题是a group
URL../%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 %}
标签的网址反转。使用group.get_absolute_url
在你的模板是好的,虽然,有没有必要使用URL标记,如果你不想。