我在' navbar'中的链接相互重叠:/

时间:2018-02-01 01:54:11

标签: python django url django-urls

大家好:)我在' navbar'中的链接当我转换到另一个链接时,彼此重叠。例如,我有一个导航栏菜单,其中包含四个不同的链接(家庭,目录,分销商和联系人)和' home'是一个基本网页。即当我从基本网页转换时,http://127.0.0.1:8000/'到目录我得到这个http://127.0.0.1:8000/catalog(好的)但是我转换到了分销商'然后我得到了这个' http://127.0.0.1:8000/catalog/distributors(这不正常)如何纠正这个问题? 我的网址模式似乎正确:/

   urlpatterns = [
   url(r'^$', views.home, name='home'),
   url(r'^catalog/$', views.catalog, name='catalog'),
   url(r'^distributors/$', views.distributors, name='distributors'),
   url(r'^contacts/$', views.contacts, name='Contacts'),
   ]

template:
<div class="header">
  <div id="inner">
    <div class="col">
        <div class="inner">
            <div class="image"><p><a href="/">HOME</a></p></div>
            <div class="filter1"></div>
            <div class="filter2"></div>
            <div class="txt">
              <p>We greet you on the main</p>
              <p>page of our website!</p>
            </div>
        </div>
    </div>
    <div class="col">
        <div class="inner">
            <div class="image"><p><a href="catalog">CATALOG</a></p></div>
            <div class="filter1"></div>
            <div class="filter2"></div>
            <div class="txt">
              <p>Browse through our catalog</p>
              <p>and select the good just for you.</p>
            </div>
        </div>
    </div>
    <div class="col">
        <div class="inner">
            <div class="image"><p><a href="distributors">DISTRIBUTORS</a></p></div>
            <div class="filter1"></div>
            <div class="filter2"></div>
            <div class="txt">
              <p>We are currently expanding our</p>
              <p>distributor network into new markets.</p>
            </div>
        </div>
    </div>
    <div class="col">
        <div class="inner">
            <div class="image"><p><a href="contacts">CONTACTS</a></p></div>
            <div class="filter1"></div>
            <div class="filter2"></div>
            <div class="txt">
              <p>You can always communicate with us</p>
              <p>using section "Contacts". </p>
            </div>
        </div>
    </div>
  </div>
</div>

views:
def home(request):
products_images = ProductImage.objects.filter(is_active=True, is_main=True, product__is_active=True)
products_images_with = products_images.filter(product__category__id=1)
products_images_without = products_images.filter(product__category__id=2)
return render(request, 'landing/home.html', locals())

def catalog(request):
products_images = ProductImage.objects.filter(is_active=True, is_main=True, product__is_active=True)
return render(request, 'landing/catalog.html', locals())

def distributors(request):
return render(request, 'landing/distributors.html', locals())

def contacts(request):
return render(request, 'landing/Contacts.html', locals())

有人可以帮我解决这个问题吗? Django版本1.11.2

2 个答案:

答案 0 :(得分:1)

正如@David D.回答的那样,你应该使用url building的方法,因为它为你提供了灵活性。

但是,如果由于某种原因你想要在href中指定绝对URL,那么在使用绝对URL时,可以通过在分配给href时在每个url名称前加一个正斜杠来解决上述问题。

所以你的新网址应该是这样的:

<a href="/catalog">CATALOG</a>
<a href="/distributors">DISTRIBUTORS</a>
<a href="/contacts">CONTACTS</a>

它起作用的原因是/代表网站的根,所以使用&#39; /&#39;将您引导至根并使用&#39; / catalog&#39;直接从根路由到您的目录页面。

答案 1 :(得分:0)

问题是你在Django模板中使用链接的方式。

请查看:https://docs.djangoproject.com/en/2.0/ref/templates/builtins/#url

你必须使用{% url 'url-name-here' %}来自Django自己构建url。

例如,在您的情况下:

<div class="image"><p><a href="{% url 'catalog'%}">CATALOG</a></p></div>

这样:

  • 对你来说更容易,你只需提供网址名称,让Django生成真正的网址。
  • 你不要重复自己;如果你想改变网址的路径,你只需要在urls.py中进行一次。