私は/ post/5post-titleや/ post/post-titleのようなslug urlを使ってみようとしています。私は現在の形でプレーンなURLを使用しています /ポスト/ 123、私は方法の多くを試みたが、すべてはhttps://keyerror.com/blog/slug-fields-an-alternative-approach私のジャンゴアプリにスラッグURLを追加できません
およびIから「主キー・ベースの検索からの移行」.. 今、私がしようとしています失敗しますbroswerエラーが発生しました。「多すぎるリダイレクト」...この問題を解決するにはどうすればよいですか、またはプレーンURLをスラッグURLに変更するためのより良い方法がありますか?
マイモデル:
class Post(models.Model):
title,article and someFields.......
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('blog:detail',kwargs={'pk':self.pk})
def slug(self):
return slugify(self.title)
と私のURL:
urlpatterns=[
url(r'^$',views.IndexView.as_view(),name='index'),
url(r'^post/(?P<pk>[0-9]+)(?:/(?P<slug>[\w-]+))?$',views.detail,name='detail'),]
私の見解:
def detail(request,pk,slug=None):
post=get_object_or_404(Post,pk=pk)
if slug!=post.slug():
return redirect(post, permanent=True)
return render(request,'blog/detail.html',context=context)
SlugFieldモデルを使用し、PK削除:
をclass Post(models.Model):
title=models.CharField(max_length=70)
body=models.TextField()
created_time=models.DateTimeField()
modified_time=models.DateTimeField()
excerpt=models.CharField(max_length=200,blank=True)
category=models.ForeignKey(Category)
tags=models.ManyToManyField(Tag,blank=True)
author=models.ForeignKey(User)
views=models.PositiveIntegerField(default=0)
excerpt=models.CharField(max_length=100,blank=True)
sluglookup = models.SlugField(
unique=True,
default=Post.slug,
max_length=15,)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('blog:detail',kwargs={'pk':self.pk})
def increase_views(self):
self.views+=1
self.save(update_fields=['views'])
def save(self,*args,**kwargs):
if not self.excerpt:
md=markdown.Markdown(extensions=[
'markdown.extensions.extra',
'markdown.extensions.codehilite',
])
self.excerpt=strip_tags(md.convert(self.body))[:54]
super(Post,self).save(*args,**kwargs)
def slug(self):
return slugify(self.title)
私はポストの下デフスラグ法(リターンslugify(self.title))を追加あなたはその後、URLをしたいと思います
私はそれを保存すると、 "(defalut = self.slug)name 'self'が定義されていない"この問題を回避するには、 – DumplingsYang
' .slug' –
cwallenpoole
デフォルト= Post.slugに変更した後、それはまだ「ポストが定義されていない」上げ.....私はソースコードを上に置きます – DumplingsYang