我试图在Django中获得某些东西,但已经好几个小时但没有成功。不过,我正在尝试使用友好的网址,比如“my-post-title-1234”,其中最后的数字是帖子的ID,在此之前是帖子的标题。我通过使用slu and和身份证获得了网址,我可以在两个视图中进行回顾。所以我检查ID是否存在,如果存在,我做其余的,如果它不存在,我做404 DoesNotExist。我在模型里面生成了slu field字段和段落标题。Django slu and和id为URL重定向
除了一件事情之外,一切都运作正常:用户可以写bla-bla-bla-1234,它仍会向他显示相同的数据(因为id存在)。我想要的是:
如果用户输入'bla-bla-bla-1234',我想重定向他以纠正slug'my-post-title-1234'。
这是我的网址看起来像:
url(r'^(?P<slug>[-\w\d]+)-(?P<post_id>\d+)/$', views.post, name='post')
这是我的模型:
class Post(models.Model):
post_title = models.CharField(max_length = 125)
text = models.TextField()
slug = models.SlugField(null = False, blank = True)
def __str__(self):
return self.post_title
def save(self, *args, **kwargs):
self.slug = slugify(self.post_title)
super(Post, self).save(*args, **kwargs)
这是我的看法:
def post(request, slug, post_id):
try:
post = Post.objects.get(id = post_id)
except Post.DoesNotExist:
raise Http404("Post does not exist")
return HttpResponse(post_id)
所以,问题是怎么做的如果用户在ID为stil的时候输入错误,我重定向(更改url)以将“bla-bla-bla-1234”中的slug修改为“my-post-title-1234”我很好。
非常感谢。
我建议把'post_id'放在另一个斜杠后面'url(r'^(?P [ - \ w \ d] +)/( ?P \ d +)/ $',views.post,name ='post')'。我认为这不适合你的原因,可能是另一个URL正在提取你的链接,你也可以尝试将URL移动到其他链接上方,以便首先处理它。 –
WayBehind
因此,我的网址看起来像/ my-post-title/1234 /,那是对的吗?并且仍然不知道如何重定向或什么... – bernadd
大多数网站把ID放在slu before之前,比如'/ 1234-my-title-slug' – ahmed