如何在Django的每个页面上显示相同的内容?

时间:2018-02-06 07:16:27

标签: django django-templates django-views

我正在用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)

2 个答案:

答案 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

How to create a context processor