我正在用Django编写一个博客网站,直到现在一切都很好看,但我记得有关Django的一些事情:DRY(不要重复自己)但在我的情况下,它是'正是我正在做的事情。
例如,我有一个小部件来显示我博客的最新帖子。这个小部件出现在我博客的每个单独或索引页面上,我无法使用include来执行此操作,因为当我包含某些内容时,它无法检测到块标记或其内容。所以我在每个其他页面编写代码块,比如category-index,blog-single-page等。更重要的是我添加数据库代码从数据库中提取数据并且每个视图def都包含此代码以显示小部件的数据,因此它不符合DRY原则。
这样做或者这是正常的方法吗? 谢谢!
以下是给您一个想法的观点:
def category_detail(request, category_slug):
posts = Post.objects # FOR BLOG POSTS WIDGET
categories = Category.objects.all() # FOR CATEGORIES WIDGET
category = get_object_or_404(Category, slug=category_slug)
category_posts = category.post_set.all()
paginator = Paginator(category_posts, 10)
page = request.GET.get('page')
cat_posts = paginator.get_page(page)
context = {
'posts': posts.order_by('is_pinned', '-published')[:20],
'popular_posts': posts.order_by('is_pinned','-views')[:15],
'categories': categories,
'category': category,
'category_posts': cat_posts,
}
return render(request, 'blog/category.html', context)
def blog_search(request):
[...]
posts = Post.objects # AGAIN, FOR LATEST POSTS WIDGET
categories = Category.objects.all() # AND AGAIN, FOR CATEGORIES WIDGET
paginator = Paginator(search_posts, 10)
page = request.GET.get('page')
search_posts = paginator.get_page(page)
context = {
'posts': posts.order_by('is_pinned', '-published')[:20],
'popular_posts': posts.order_by('is_pinned','-views')[:15],
'categories': categories,
'search_posts': search_posts,
}
return render(request, 'blog/search.html', context)
答案 0 :(得分:1)
StandardAnalyzer analyzer = new StandardAnalyzer();
analyzer.tokenStream("text", new StringReader(chunkText));
在您需要的视图中
make a python function
def common():
post = code()
category = code()
return post, category
答案 1 :(得分:1)
您必须创建基本模板并在每个页面中扩展它。阅读template inheritance
如果要在基本模板中显示某些值(即在每个页面中显示值),请使用django的上下文处理器。阅读此here