3 つのモデルが別々に呼び出されています。1 つは最初の列に、2 番目は 2 番目の列に、3 番目は 3 列目にあります。1 つ目はカテゴリで、変更はありません。2 番目は投稿で、カテゴリが選択されている場合は、それらのカテゴリの投稿を表示する必要があり (そうでない場合はすべてを表示)、3 番目は選択された投稿です (何も表示されない場合は何も表示されません)。
私は get_absolute_url 呼び出しでいくらか機能していますが、あまりにも多く (4 つ) の異なるビューを使用していて、面倒です。また、この方法は常に正しく機能するとは限りません。私が持っている投稿を選択すると、たとえば、まだすべての投稿を表示している可能性がある場合、投稿のリストがそのカテゴリに変更されます。
これを正しく機能させるにはどうすればよいですか?ajaxもこれに適していることは知っていますが、最初にajaxなしで動作させてから実装したいのですか、それともajaxでのみ可能ですか?
これが私の関連コードです:
モデル:
class Category(models.Model):
name = models.CharField(max_length=30, unique=True)
def get_absolute_url(self):
return "/category/%i/" % self.id
class Post(models.Model):
category = models.ForeignKey(Category)
title = models.CharField(max_length=256)
author = models.CharField(max_length=256)
link = models.URLField(max_length=512)
dt_published = models.DateTimeField()
content = models.TextField()
def get_absolute_url(self):
return "/%i/%i/" % (self.category.id, self.id)
URL:
urlpatterns += patterns('myapp.views',
url(r'^main/$', 'mainview'),
url(r'^post/(\d+)/$', 'mainview2'),
url(r'^category/(\d+)/$', 'mainview3'),
url(r'^(\d+)/(\d+)/$', 'mainview4'),
)
ビュー:
def mainview(request):
category_list = Category.objects.all()
post_list = Post.objects.all()
entry = None
return render(request, 'main.html', {'category_list': category_list, 'post_list': post_list, 'entry': entry})
def mainview2(request, postid):
category_list = Category.objects.all()
post_list = Post.objects.all()
entry = Post.objects.filter(id=postid)
return render(request, 'mainview.html', {'category_list': category_list, 'post_list': post_list, 'entry': entry})
def mainview3(request, catid):
category_list = Category.objects.all()
post_list = Post.objects.filter(category=catid)
entry = None
return render(request, 'mainview.html', {'category_list': category_list, 'post_list': post_list, 'entry': entry})
def mainview4(request, catid, postid):
category_list = Category.objects.all()
cat_selected = Category.objects.filter(id=catid)
post_list = Post.objects.filter(category=cat_selected)
entry = Post.objects.filter(id=postid)
return render(request, 'main view.html', {'category_list': category_list, 'post_list': post_list, 'entry': entry})