使用主键重定向 django {% url %}
redirect with primary key django {% url %}
我想制作博客,里面有类别和 posts。
应显示类别,当您单击它时,您将被重定向到显示此类文章的另一个站点。
models.py:
class Category(CMSPlugin):
title = models.CharField(max_length=20, default='category')
def __unicode__(self):
return self.title
class Blog_post(CMSPlugin):
category = models.ForeignKey(Category)
style = models.ForeignKey(Blog_style)
title = models.CharField(max_length=200, default='title')
description = models.CharField(max_length=200,default='description')
image = models.ImageField(upload_to='static', null=True, blank=True)
text = models.TextField()
created_date = models.DateTimeField(default=timezone.now)
published_date = models.DateTimeField(blank=True, null=True)
def publish(self):
self.published_date = timezone.now()
self.save()
def __unicode__(self):
return self.title
views.py
def Blog_list(request):
posts = Blog_post.objects.filter(published_date__lte=timezone.now()).order_by('published_date')
category = Category.objects.all()
return render(request, 'blogspot.html', {'posts': posts, 'category':category})
def post_detail(request, pk):
post = get_object_or_404(Blog_post, pk=pk)
return render(request, 'post_detail.html', {'post': post})
def category_detail(request, pk):
cat = get_object_or_404(Category, id=pk)
post_with_category = Blog_post.objects.filter(category=cat)
return render(request, 'articles.html', {'post_with_category': post_with_category})
blogspot.html
{% for post in posts %}
<h1><a href="{% url 'post_detail' pk=post.pk %}">{{post.title}}</a></h1>
<a href="{% url 'category_detail' pk=post.category.id %}" >{{ post.category }}</a>
{{post.title}}
{{ post.description }}
{{ post.image }}
{{ post.text }}{{ post.published_date }}
{% endfor %}
目前一切正常。我可以点击 {{post.title}} 并将我重定向到 post_detail。现在我想对类别进行相同的逻辑。当我点击 {{post.category}} 时,我想重定向到 articles.html,在那里你可以看到特定类别的所有文章。
编辑:
我插入了代码以在类别中显示 post。我坚持使用 for 循环。如果我使用 post 中提到的循环,我会得到所有 post 和类别。问题是如果我在一个类别中有 2 个 post,并且此循环将在模板中显示 2x "category"。
所以我编辑了 for 循环。
{% for post in category %}
{{post.title}}
{% endfor %}
如果我在此循环中插入 <a href="{% url 'category_detail' pk=post.category.id %}" >{{post.title}}
,则不会得到反向匹配。
我尝试修改 views.py category_detail
而 url 应该看起来像 localhost/<category>/
另一个问题是,"select*from Table Where Column_id= id ;
的 QRM 替代命令是什么
urls.py
url(r'^blog/$', views.Blog_list, name='Blog_list'),
url(r'^blog/(?P<pk>\d+)/$', views.post_detail, name='post_detail'),
如果我理解你的问题,django 允许你通过 main 对象引用 FK 对象。因此,由于您的 post.category
是 Category
模型的一个实例,您应该能够使用 post.category.id
进行反向查找,因此您的模板将具有以下内容:
<a href="{% url 'category_detail' pk=post.category.id %}" >{{ post.category }}</a>
然后,在您的 category_detail
视图中,您只需使用 pk
进行查找:
cat = get_object_or_404(Category, id=pk)
post_with_category = Blog_post.objects.filter(category=cat)
然后您可以通过新的 post_with_category
对象列表在新的 url link 上显示具有相同类别的帖子列表。
编辑:
您的 url 可能希望包含类似以下内容以使上述 html href 标签起作用:
url(r'^cat/(?P<pk>[0-9]+)/$', views.category_detail, name='category_detail'),
我想制作博客,里面有类别和 posts。 应显示类别,当您单击它时,您将被重定向到显示此类文章的另一个站点。
models.py:
class Category(CMSPlugin):
title = models.CharField(max_length=20, default='category')
def __unicode__(self):
return self.title
class Blog_post(CMSPlugin):
category = models.ForeignKey(Category)
style = models.ForeignKey(Blog_style)
title = models.CharField(max_length=200, default='title')
description = models.CharField(max_length=200,default='description')
image = models.ImageField(upload_to='static', null=True, blank=True)
text = models.TextField()
created_date = models.DateTimeField(default=timezone.now)
published_date = models.DateTimeField(blank=True, null=True)
def publish(self):
self.published_date = timezone.now()
self.save()
def __unicode__(self):
return self.title
views.py
def Blog_list(request):
posts = Blog_post.objects.filter(published_date__lte=timezone.now()).order_by('published_date')
category = Category.objects.all()
return render(request, 'blogspot.html', {'posts': posts, 'category':category})
def post_detail(request, pk):
post = get_object_or_404(Blog_post, pk=pk)
return render(request, 'post_detail.html', {'post': post})
def category_detail(request, pk):
cat = get_object_or_404(Category, id=pk)
post_with_category = Blog_post.objects.filter(category=cat)
return render(request, 'articles.html', {'post_with_category': post_with_category})
blogspot.html
{% for post in posts %}
<h1><a href="{% url 'post_detail' pk=post.pk %}">{{post.title}}</a></h1>
<a href="{% url 'category_detail' pk=post.category.id %}" >{{ post.category }}</a>
{{post.title}}
{{ post.description }}
{{ post.image }}
{{ post.text }}{{ post.published_date }}
{% endfor %}
目前一切正常。我可以点击 {{post.title}} 并将我重定向到 post_detail。现在我想对类别进行相同的逻辑。当我点击 {{post.category}} 时,我想重定向到 articles.html,在那里你可以看到特定类别的所有文章。
编辑:
我插入了代码以在类别中显示 post。我坚持使用 for 循环。如果我使用 post 中提到的循环,我会得到所有 post 和类别。问题是如果我在一个类别中有 2 个 post,并且此循环将在模板中显示 2x "category"。
所以我编辑了 for 循环。
{% for post in category %}
{{post.title}}
{% endfor %}
如果我在此循环中插入 <a href="{% url 'category_detail' pk=post.category.id %}" >{{post.title}}
,则不会得到反向匹配。
我尝试修改 views.py category_detail
而 url 应该看起来像 localhost/<category>/
另一个问题是,"select*from Table Where Column_id= id ;
urls.py
url(r'^blog/$', views.Blog_list, name='Blog_list'),
url(r'^blog/(?P<pk>\d+)/$', views.post_detail, name='post_detail'),
如果我理解你的问题,django 允许你通过 main 对象引用 FK 对象。因此,由于您的 post.category
是 Category
模型的一个实例,您应该能够使用 post.category.id
进行反向查找,因此您的模板将具有以下内容:
<a href="{% url 'category_detail' pk=post.category.id %}" >{{ post.category }}</a>
然后,在您的 category_detail
视图中,您只需使用 pk
进行查找:
cat = get_object_or_404(Category, id=pk)
post_with_category = Blog_post.objects.filter(category=cat)
然后您可以通过新的 post_with_category
对象列表在新的 url link 上显示具有相同类别的帖子列表。
编辑:
您的 url 可能希望包含类似以下内容以使上述 html href 标签起作用:
url(r'^cat/(?P<pk>[0-9]+)/$', views.category_detail, name='category_detail'),