Django: Как отображать данные контекста из одного шаблона в нескольких шаблонах - PullRequest
0 голосов
/ 06 августа 2020

Мне нужно использовать метод обновления контекста в каждом представлении, чтобы отображать данные с моей боковой панели. html шаблон, который я включаю в другие шаблоны как часть моей навигации. Есть ли другой способ включить данные из моей боковой панели. html и другие шаблоны? Мне придется сделать это для множества шаблонов, и это не кажется правильным способом сделать это.

blog / views.py

class BlogPostDetailView(DetailView):
    model = BlogPost
    context_object_name = "post"
    template_name = "blog/single.html"

    def get_context_data(self, **kwargs):
        context = super(BlogPostDetailView, self).get_context_data(**kwargs)
        context.update(
            {
                "categories": Category.objects.all().annotate(
                    post_count=Count("categories")
                )
            },
        )

        return context

Core / views. py

class HomeView(ListView):
    model = BlogPost
    context_object_name = "posts"
    template_name = "core/index.html"
    paginate_by = 4
    ordering = ["-date_posted"]

    def get_context_data(self, **kwargs):
        context = super(HomeView, self).get_context_data(**kwargs)
        context.update(
            {
                "categories": Category.objects.all().annotate(
                    post_count=Count("categories")
                )
            },
        )

        return context

ядро ​​/ включает / боковую панель. html

...
<div class="sidebar-box ftco-animate">
    <h3 class="sidebar-heading">Categories</h3>
    <ul class="categories">
        {% for category in categories %}
        <li><a href="#">{{ category.title }}
                <span>({{ category.post_count }})</span></a></li>
        {% endfor %}
    </ul>
</div>
...

1 Ответ

1 голос
/ 06 августа 2020

используйте обработчик контекста djangos для этого, используя, чтобы вы могли получить эти данные во всей базе шаблона без передачи контекста во всем шаблоне

например, я хочу, чтобы настройки сайта включали настройки сайта, такие как contactus и emailaddress весь этот столбец, поэтому я сделаю обработчик контекста для этого

создаст новый файл

context_processor.py

в этом

from foo import Configuration

def code_base(request):

    conf = Configuration.objects.all()
    return {'conf':conf}

Note: also add that context processor in the settings.py under templates on the context processor list 

так что из теперь вам не нужно передавать 'conf' во всех шаблонах, поскольку вы можете напрямую обращаться к {{conf}} без передачи контекста в шаблоне

...