在Django中,我的定义(循环)在其他页面上不起作用

时间:2019-01-13 21:42:25

标签: python django

我使用循环在导航栏上查看类别。导航栏包含在布局中,所有模板扩展了布局。我在navbar中放入循环以显示类别。如果我将上下文放在索引定义中,它正在起作用,但是如何在所有页面上显示循环?我认为我需要全局定义。

我的是Django 2.1.2,Python 3.5

view.py:

def index(request):
    products = Product.objects.filter()
    catloops = Category.objects.filter()
    context = {
        "products":products,
        "catloops":catloops,



                }
    return render(request,"index.html", context)

def cat_nav(request):
    catloops = Category.objects.filter()
    context = {

        "catloops":catloops,
    }
    return render(render, "????", context)

urls.py:

urlpatterns = [
    path('admin/', admin.site.urls),
    path('',views.index, name="index"),
    path('about/',views.about, name="about"),
    path('products/',include("product.urls")),
    path('user/',include("user.urls")),
    path('products/',views.products, name="products"),
    path('myorders/',views.myorders, name="myorders"),
    path('dashboard/',views.dashboard, name="dashboard"),
    path('myprofile/',views.myprofile, name="myprofile"),
    path('????',views.cat_nav, name="cat_nav"),
    #user/register.. geldiğinde git user app'inden al
]

navbar.html:

<li class="nav-item dropdown menu-large"><a href="#" data-toggle="dropdown" class="dropdown-toggle">Categories <b class="caret"></b></a>
                  <ul class="dropdown-menu megamenu">
                    <li>
                      <div class="row">
                        <div class="col-lg-6"><img src="{% static 'img/template-homepage.png' %}" alt="" class="img-fluid d-none d-lg-block"></div>
                        <div class="col-lg-3 col-md-6">
                          <h5>Used Products</h5>
                          <ul class="list-unstyled mb-3">
                           {% for category in catloops %}
                    <li class="dropdown-item"><a href="/products" class="nav-link">{{category.category_name}}</a></li>

                    {% endfor %}

如果我将上下文放入索引定义,则可以正常工作,但是当我转到其他页面(URL)时,看不到我的类别。

1 个答案:

答案 0 :(得分:0)

为此您需要一个context processor

基本上,在您的应用程序内部创建一个名为context_processors.py的文件,并向其中添加以下代码:

def categories(request):
    catloops = Category.objects.filter()
    return {'catloops': catloops}

在您的settings.py中,在TEMPLATES列表中添加context_processor,添加您刚创建的文件:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')]
        ,
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'yourapp.context_processors.categories',
            ],
        },
    },
]

现在,在每个页面中,您都可以访问catloops

您可能需要重新启动服务器。