Python 如何修复通过下拉框单击类别时无法查看特定类别组的问题?
我正在尝试组织博客类别。我创建了一些“测试帖子”,当我启动服务器时,单击下拉框上的相关类别标签,页面不会显示与该类别相关的页面。除了标题和侧边栏,它不会渲染任何内容 Models.py Views.py url.py 来自django.conf导入设置的Python 如何修复通过下拉框单击类别时无法查看特定类别组的问题?,python,django,Python,Django,我正在尝试组织博客类别。我创建了一些“测试帖子”,当我启动服务器时,单击下拉框上的相关类别标签,页面不会显示与该类别相关的页面。除了标题和侧边栏,它不会渲染任何内容 Models.py Views.py url.py 来自django.conf导入设置的 从django.conf.url.static导入静态 从django.contrib导入管理 从django.url导入路径,包括 从导入后视图 从post.views导入索引、blog\u single、about、category、pos
从django.conf.url.static导入静态
从django.contrib导入管理
从django.url导入路径,包括
从导入后视图
从post.views导入索引、blog\u single、about、category、post、search、contact
URL模式=[
路径(r'^tinymce/',include('tinymce.url'),
路径('admin/',admin.site.url),
路径(“”,索引),
路径('users/',包括('users.url'),#新建
路径('users/',包括('django.contrib.auth.url')),#新建
路径('blog_single/',blog_single),
路径('about/',about),
路径('category/',category),
路径('search',search,name='search'),
路径('post/',post,name='post-detail'),
路径('contact/',contact),
路径('/',views.blog_single,name=“detail”),
路径(r“^category/(?P.+)/$”,views.show_category,name='category')
]
如果设置为.DEBUG:
urlpatterns+=静态(settings.static\u URL,document\u root=settings.static\u root)
urlpatterns+=静态(settings.MEDIA\u URL,document\u root=settings.MEDIA\u root)
category.html
{%extends'base.html%}
{%load static%}
{%block content%}
{%if子_类别%}
子类别
{i在子_类别中的百分比%}
{%endfor%}
{%endif%}
{%if post_set%}
{post_set%中的i的%s}
{%endfor%}
{%endif%}
{%include'sidebar.html',category_count=category_count most_recent=most_recent%}
{%endblock%}
from django.db import models
from django.urls import reverse
from tinymce import HTMLField
from django.utils import timezone
class Comment(models.Model):
post = models.ForeignKey('Post', on_delete=models.CASCADE, related_name='comments')
author = models.CharField(max_length=200)
text = models.TextField()
created_date = models.DateTimeField(default=timezone.now)
approved_comment = models.BooleanField(default=False)
def approve(self):
self.approved_comment = True
self.save()
def __str__(self):
return self.text
class CategoryTag(models.Model):
title = models.CharField(max_length=150)
slug = models.SlugField(unique=True)
parent = models.ForeignKey(
'self',
on_delete=models.CASCADE,
blank=True,
null=True,
related_name='children'
)
class Meta:
unique_together = ('slug', 'parent',)
verbose_name_plural = 'categories'
def __str__(self):
full_path = [self.title]
k = self.parent
while k is not None:
full_path.append(k.title)
k = k.parent
return ' -> '.join(full_path[::-1])
class Post(models.Model):
title = models.CharField(max_length=100)
overview = models.TextField()
timestamp = models.DateTimeField(auto_now_add=True)
content = HTMLField('Content')
comment_count = models.IntegerField(default=0)
post_img = models.ImageField()
categories = models.ForeignKey('CategoryTag', null=True, blank=True, on_delete=models.CASCADE)
featured = models.BooleanField()
slug = models.SlugField(unique=True)
def __str__(self):
return self.title
def get_cat_list(self):
k = self.categories
breadcrumb = ["dummy"]
while k is not None:
breadcrumb.append(k.slug)
k = k.parent
for i in range(len(breadcrumb)-1):
breadcrumb[i] = '/'.join(breadcrumb[-1:i-1:-1])
return breadcrumb[-1:0:-1]
def get_absolute_url(self):
return reverse('post-detail', kwargs={
'id': self.id
})
from django.db.models import Count, Q
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.shortcuts import render, get_object_or_404
from .models import Post
from marketing.models import Signup
def search(request):
queryset = Post.objects.all()
query = request.GET.get('q')
if query:
queryset = queryset.filter(
Q(title__icontains=query) |
Q(overview__icontains=query)
).distinct()
context = {
'queryset': queryset
}
return render(request, 'search_results.html', context)
def get_category_count():
queryset = Post \
.objects \
.values('categories__title') \
.annotate(Count('categories__title'))
return queryset
def index(request):
category_count = get_category_count()
most_recent = Post.objects.order_by('-timestamp')[:3]
featured = Post.objects.filter(featured=True)
latest = Post.objects.order_by('-timestamp')[0:3]
post_list = Post.objects.all()
paginator = Paginator(post_list, 6)
page_request_var = 'page'
page = request.GET.get(page_request_var)
try:
paginated_queryset = paginator.page(page)
except PageNotAnInteger:
paginated_queryset = paginator.page(1)
except EmptyPage:
paginated_queryset = paginator.page(paginator.num_pages)
if request.method == "POST":
email = request.POST["email"]
new_signup = Signup()
new_signup.email = email
new_signup.save()
context = {
'object_list': featured,
'queryset': paginated_queryset,
'most_recent': most_recent,
'latest': latest,
'page_request_var': page_request_var,
'category_count': category_count
}
return render(request, 'index.html', context)
def blog_single(request):
category_count = get_category_count()
most_recent = Post.objects.order_by('-timestamp')[:3]
post = get_object_or_404(Post, id=id)
latest = Post.objects.order_by('-timestamp')[:3]
context = {
'post': post,
'most_recent': most_recent,
'latest': latest,
'category_count': category_count
}
return render(request, 'blog-single.html', {})
def about(request):
category_count = get_category_count()
most_recent = Post.objects.order_by('-timestamp')[:3]
latest = Post.objects.order_by('-timestamp')[:3]
context = {
'post': post,
'most_recent': most_recent,
'latest': latest,
'category_count': category_count
}
return render(request, 'about.html', context)
def category(request):
return render(request, 'category.html', {})
def contact(request):
category_count = get_category_count()
most_recent = Post.objects.order_by('-timestamp')[:3]
latest = Post.objects.order_by('-timestamp')[:3]
context = {
'most_recent': most_recent,
'latest': latest,
'category_count': category_count
}
return render(request, 'contact.html', context)
def post(request, id):
category_count = get_category_count()
most_recent = Post.objects.order_by('-timestamp')[:3]
post = get_object_or_404(Post, id=id)
latest = Post.objects.order_by('-timestamp')[:3]
context = {
'post': post,
'most_recent': most_recent,
'latest': latest,
'category_count': category_count
}
return render(request, 'blog-single.html', context)
def show_category(request,hierarchy= None):
category_slug = hierarchy.split('/')
category_queryset = list(CategoryTag.objects.all())
all_slugs = [ x.slug for x in category_queryset ]
parent = None
for slug in category_slug:
if slug in all_slugs:
parent = get_object_or_404(CategoryTag,slug=slug,parent=parent)
else:
instance = get_object_or_404(Post, slug=slug)
breadcrumbs_link = instance.get_cat_list()
category_name = [' '.join(i.split('/')[-1].split('-')) for i in breadcrumbs_link]
breadcrumbs = zip(breadcrumbs_link, category_name)
return render(request, "blog-single.html", {'instance':instance,'breadcrumbs':breadcrumbs})
return render(request,"category.html",{'post_set':parent.post_set.all(),'sub_categories':parent.children.all()})
from django.conf import settings
from django.conf.urls.static import static
from django.contrib import admin
from django.urls import path, include
from post import views
from post.views import index, blog_single, about, category, post, search, contact
urlpatterns = [
path(r'^tinymce/', include('tinymce.urls')),
path('admin/', admin.site.urls),
path('', index),
path('users/', include('users.urls')), # new
path('users/', include('django.contrib.auth.urls')), # new
path('blog_single/', blog_single),
path('about/', about),
path('category/', category),
path('search', search, name='search'),
path('post/<id>/', post, name='post-detail'),
path('contact/', contact),
path('<slug:slug>/', views.blog_single, name="detail"),
path(r'^category/(?P<hierarchy>.+)/$', views.show_category, name='category')
]
if settings.DEBUG:
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
{% extends 'base.html' %}
{% load static %}
{% block content %}
<section class="site-section">
<div class="container">
<div class="row mb-4">
<div class="col-md-6">
{% if sub_categories %}
<h2 class="mb-4">Sub Categories</h2>
{% for i in sub_categories %}
<a href="{{ i.slug }}"> {{ i.name }} </a>
{% endfor %}
{% endif %}
</div>
</div>
<div class="row blog-entries">
<div class="col-md-12 col-lg-8 main-content">
<div class="row mb-5 mt-5">
<div class="col-md-12">
{% if post_set %}
{% for i in post_set %}
<div class="post-entry-horzontal">
<a href="{{ i.slug }}">
<div class="image element-animate" data-animate-effect="fadeIn" style="background-image: url(images/img_10.jpg);">
</div>
<span class="text">
<div class="post-meta">
<span class="category">{{ i.slug }}</span>
<span class="mr-2">{{ obj.timestamp|timesince }} ago </span> •
<span class="ml-2"><span class="fa fa-comments"></span> {{ post.comment_count }}</span>
</div>
<h2>{{ i.title | truncatechars:30}}</h2>
</span>
</a>
</div>
{% endfor %}
{% endif %}
<!-- END post -->
<!-- END post -->
</div>
</div>
<!-- Pagination -->
<div class="row">
<div class="col-md-12 text-center">
<nav aria-label="Page navigation" class="text-center">
<ul class="pagination">
<li class="page-item active"><a class="page-link" href="#">Prev</a></li>
<li class="page-item"><a class="page-link" href="#">1</a></li>
<li class="page-item"><a class="page-link" href="#">2</a></li>
<li class="page-item"><a class="page-link" href="#">3</a></li>
<li class="page-item"><a class="page-link" href="#">Next</a></li>
</ul>
</nav>
</div>
</div>
</div>
<!-- END main-content -->
{% include 'sidebar.html' with category_count=category_count most_recent=most_recent %}
<!-- END sidebar -->
</div>
</div>
</section>
{% endblock %}