【问题标题】:I am extending my header and footer but when I pass data in footer it is visible only at home page not on other pages我正在扩展页眉和页脚,但是当我在页脚中传递数据时,它仅在主页上可见,在其他页面上不可见
【发布时间】:2021-03-12 01:33:09
【问题描述】:

我正在扩展我的页眉和页脚,但是当我在页脚中传递数据时,它仅在主页上可见,而在其他页面上不可见。 我知道我必须在每一页上传递这些数据,但我正在寻找一个简单的解决方案 示例:

from django.shortcuts import render,redirect
from footer.models import Footer

   def home(request):
       contact_info = Footer.objects.all()
       return render(request,'frontend/index.html', {'contact_info':contact_info})

Index.html

<div class="col-md-3 col-md-push-1">
                <div class="gtco-widget">
                    <h3>Get In Touch</h3>
                    <ul class="gtco-quick-contact">

                        {% if contact_info %}
                        {% for i in contact_info %}
                        <li><a href="tel:{{ i.phone }}"><i class="icon-phone"></i>{{ i.phone}}</a></li>

                        
                        <li><a href="mailto:{{ i.email }}"><i class="icon-mail2"></i>{{ i.email }}</a></li>


                        <li><a href="http://maps.google.com/?q={{ i.location }}"><i class="ti-location-pin"></i>{{ i.location }}</a></li>
                        {% endfor %}

                        {% endif %}

                    </ul>
                </div>
            </div>

在联系页面:

在索引页面:

【问题讨论】:

    标签: python html django django-templates jinja2


    【解决方案1】:

    如果您需要每个页面中的数据,那么您可以使用上下文处理器。

    在你的应用文件夹中,创建 context_processor.py

    context_processor.py:

    def context_processor(request):
        context = {}
        context['data'] = 'Some data'
        return context    
    

    settings.py:

    TEMPLATES = [
        {
            ...,
            'OPTIONS': {
                ...,
                'app_name.context_processor.context_processor'
            }
        }
    ]
    

    在您的模板中。在你的情况下,你可以在你的 footer.html 中使用

    {{data}}
    

    仅供参考:您也不需要使用自己的视图。

    【讨论】:

    • Hemant Yadav(印度德里):是的,我用过这个,对我来说效果很好。因为我认为这不仅适用于页眉或页脚,即使您可以在这里传递模型,您也可以在项目模板中的任何位置调用。
    • 是的,取决于要求。
    【解决方案2】:

    context_processor.py

    from designzoned.models import ServicesModel
    def context_processor(request):
       context = {}
       context['service_list'] = ServicesModel.objects.all()
       return context
    

    settings.py

    TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'django.template.context_processors.request',
                # In below line you have to write like this
                'designzoned.context_processor.context_processor',
            ],
        },
    },
    

    ]

    header.html

    <ul class="dropdown-menu">
       {% for service in service_list %}
          <li><a href="{% url 'services_detail' service.slug %}">{{ 
           service.name }}</a></li>
       {% endfor %}
    </ul>
    

    【讨论】:

      猜你喜欢
      • 2021-10-03
      • 2012-12-30
      • 2019-06-02
      • 1970-01-01
      • 2016-06-25
      • 2014-06-24
      • 1970-01-01
      • 2022-08-16
      相关资源
      最近更新 更多