我对Django很新,我一直在关注构建一个简单的博客应用程序的教程。我的应用程序到目前为止工作正常(使用Django 1.8.6)。这是我的urls.py,views.py和models.py:
urls.py
urlpatterns = [
url('admin/', admin.site.urls),
url(r'^blog/', include('blog.urls', namespace='blog', app_name='blog')),
博客/ urls.py
urlpatterns = [
url(r'^$', views.post_list, name='post_list'),
url(r'^(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})/'\
r'(?P<post>[-\w]+)/$',
views.post_detail,
name='post_detail'),
url(r'^tag/(?P<tag_slug>[-\w]+)/$', views.post_list,
name='post_list_by_tag'),
]
博客/ views.py
def post_list(request, tag_slug=None):
object_list = Post.published.all()
tag = None
if tag_slug:
tag = get_object_or_404(Tag, slug=tag_slug)
object_list = object_list.filter(tags__in=[tag])
return render(request,
'blog/post/list.html',
{
'posts': posts,
'tag': tag
})
def post_detail(request, year, month, day, post):
post = get_object_or_404(Post, slug=post,
status='published',
publish__year=year,
publish__month=month,
publish__day=day)
post_tags_ids = post.tags.values_list('id', flat=True)
similar_posts = Post.published.filter(tags__in=post_tags_ids)\
.exclude(id=post.id)
similar_posts = similar_posts.annotate(same_tags=Count('tags'))\
.order_by('-same_tags','-publish')[:4]
return render(request,
'blog/post/detail.html',
{'post': post,
'similar_posts': similar_posts})
博客/ models.py
class Post(models.Model):
STATUS_CHOICES = (
('draft', 'Draft'),
('published', 'Published'),
)
title = models.CharField(max_length=250)
slug = models.SlugField(max_length=250,
unique_for_date='publish')
author = models.ForeignKey(User,
related_name='blog_posts', on_delete=models.CASCADE)
body = models.TextField()
publish = models.DateTimeField(default=timezone.now)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
status = models.CharField(max_length=10,
choices=STATUS_CHOICES,
default='published')
tags = TaggableManager()
class Meta:
ordering = ('-publish',)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('blog:post_detail',
args=[self.publish.year,
self.publish.strftime('%m'),
self.publish.strftime('%d'),
self.slug])
objects = models.Manager() # The default manager.
published = PublishedManager() # Our custom manager.
现在我想创建4个页面,每个博客帖子都应该根据作者的选择显示在其中一个页面上。我希望我的网页有一个自定义模板,允许我在博客帖子上方添加其他主页内容。我的想法是创建一个“页面”应用程序,其中包含一个由博客模板扩展的模板。在博客模型中,我将实现“pagedisplay”字段,其中cms中的作者可以选择他想要显示帖子的页面。 所以本质上不是在www.example.com/blog页面上显示所有帖子并从那里链接到它们,我想根据作者的选择在多个页面上分发它们。 最后,对于个别帖子,网址应该看起来有点像这样。
www.example.com/page2/2017/12/30/post1/
而
www.example.com/page2
应显示该页面上发布的最近帖子的列表。 根据我的理解,这意味着在我的urlpatterns中,我首先需要访问pages.urls.py,然后才能访问。 我正在努力学习如何从pages / urls.py和pages / views.py中正确构建各个帖子的网址,以及如何在模板中正确呈现这些网址。关于这个问题的任何建议或我是否应该采取完全不同的方法,我们非常感谢。