首页 > 解决方案 > django bootstrap navbar 下拉元素在使用相同的 base.html 时没有出现在其他 url

问题描述

我是 django 新手并创建了一个应用程序。我已经创建了两种模式,一个是主模式,另一个是细节。在单个 base.html 上使用引导导航栏下拉菜单时,我能够在下拉菜单中获取主记录,而当我在单击任何下拉元素时切换到不同的页面时,我没有得到下拉元素。我在主页面和详细页面中都扩展了 base.html。请帮助任何选项

下拉菜单工作 http://127.0.0.1:8000/environment/

下拉菜单不起作用 http://127.0.0.1:8000/environment/env_name

base.html

 <!-- menu buttons -->
        <div class="collapse navbar-collapse" id="topNavBar">
            <ul class="nav navbar-nav">
                <li class="active">
                    <li class="nav-item dropdown" >
                        <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                          <span class="glyphicon glyphicon-globe" aria-hidden="true"></span> Environment
                        </a>
                        <div class="dropdown-menu" aria-labelledby="navbarDropdown">
                              {% for envmaster in all_envmaster %}
                                <a class="dropdown-item" href="{% url 'environment:detail' envmaster.env_name %}">{{ envmaster.env_name }}</a>
                                <div class="dropdown-divider"></div>
                              {% endfor %}
                        </div>
                        <!--<a href="{% url 'environment:index' %}">
                            <span class="glyphicon glyphicon-globe" aria-hidden="true"></span>&nbsp; Environment
                        </a>-->
                    </li>
                </li>
                <li class="">
                    <a href="#">
                        <span class="glyphicon glyphicon-file" aria-hidden="true"></span>&nbsp; Details
                    </a>
                </li>
            </ul>

详细信息.html

<!-- Loads the path to your static files -->

{% extends 'environment/base.html' %}
{% block title %}Environment Details{% endblock %}

{% block body %}
    <!--<img src="{{ envmaster.env_name }}" style="width: 250px;"><br>-->

    <h3>{{ envmaster.env_name }}</h3>

    {% if error_message %}
        <p><strong>{{ error_message }}</strong></p>
    {% endif %}

        {% csrf_token %}
        {% for envdetail in envmaster.envdetail_set.all %}
        <li>{{ envdetail.env_component }} - {{ envdetail.component_class }} - {{ envdetail.value_1 }}</li><br>
        {% endfor %}
{% endblock %}

索引.html

<!-- Loads the path to your static files -->

{% extends 'environment/base.html' %}
{% block title %}Environment Details{% endblock %}


{% block body %}
    {% if all_envmaster %}
        <h3>Here are all Environment:</h3>
        <ul>
            {% for envmaster in all_envmaster %}
            <li><a href="{% url 'environment:detail' envmaster.env_name %}">{{ envmaster.env_name }}</a></li>
            {% endfor %}
        </ul>
    {% else %}
        <h3>You don't have any Environment</h3>
    {% endif %}
{% endblock %}

模型.py

from django.db import models
from django.urls import reverse


class Envmaster(models.Model):
    env_name = models.CharField(primary_key=True, max_length=256)
    env_type = models.CharField(max_length=256, blank=True, null=True)
    env_owner = models.CharField(max_length=256, blank=True, null=True)
    cur_release = models.CharField(max_length=256, blank=True, null=True)

    class Meta:
        db_table = 'ENVMASTER'

    def get_absolute_url(self):
        return reverse('environment:detail', kwargs={'pk': self.pk})

    def __str__(self):
        return self.env_name


class Envdetail(models.Model):
    env_name = models.ForeignKey(Envmaster,on_delete=models.CASCADE)
    env_component = models.CharField(max_length=256, blank=True, null=True)
    component_class = models.CharField(max_length=256, blank=True, null=True)
    value_1 = models.CharField(max_length=256, blank=True, null=True)
    value_2 = models.CharField(max_length=256, blank=True, null=True)
    value_3 = models.CharField(max_length=256, blank=True, null=True)
    additional_info = models.CharField(max_length=256, blank=True, null=True)

    class Meta:
        db_table = 'ENVDETAIL'

    def __str__(self):
        return self.env_component

视图.py

from django.views import generic
from django.views.generic.edit import CreateView, UpdateView, DeleteView
from django.urls import reverse_lazy
from django.shortcuts import render, get_object_or_404
from .models import Envmaster


class IndexView(generic.ListView):
    template_name = 'environment/index.html'
    context_object_name = 'all_envmaster'

    def get_queryset(self):
        return Envmaster.objects.all()


class DetailView(generic.DetailView):
    model = Envmaster
    template_name = 'environment/detail.html'

网址.py

urlpatterns = [
    re_path(r'^$', views.IndexView.as_view(), name="index"),

    #/environment/env_name/
    re_path(r'^(?P<pk>[\w\-]+)/$', views.DetailView.as_view(), name='detail'),


标签: pythonhtmldjangobootstrap-4

解决方案


在浏览不同的帖子并尝试时,我在应用程序级别创建了一个上下文文件,以便在初始化类对象后,它应该保留导航栏中的值

from .models import Envmaster

def show_env_menu(context):
   env_menu = Envmaster.onjects.all()
   return {'env_menu': env_menu}

推荐阅读