Как у меня не длинный список HTML в URL при реализации панели навигации? - PullRequest
0 голосов
/ 06 июня 2019

Я спроектировал панель навигации, используя base.html, styles.css и main.js.

Я использовал в нем about.html и contact.html через

{%block content%}
...
{%endblock%}

Но когда я нажимаю на панель навигации, которая связывает меня, например, с О, она переходит на любую страницу, на которой я нахожусь (например, на страницу контакта, например http://127.0.0.1:8000/contact/), а затем добавляю html () http://127.0.0.1:8000/contact/about.html)

Это приводит к большому количеству URL, которые я должен добавить в urls.py. (например, contact / about.html и about / about.html только для перехода на страницу about)

Есть ли способ упростить это?

Это мой urls.py:

from django.contrib import admin
from django.urls import path
from home.views import about, contact

urlpatterns = [
    path('admin/', admin.site.urls),
    path('about/', about),
    path('contact/',contact),
]

это мой base.html:

<!DOCTYPE html>
<html lang="en">
    <head>
        {% load static %}
        <link rel="stylesheet" href="{% static 'home/styles.css' %}">
        <link href="https://fonts.googleapis.com/css?family=Poppins&display=swap" rel="stylesheet">
        <meta charset="UTF-8">
        <title>{%block name%}{% endblock %}</title>
    </head>

    <body>
        <header>
            <nav>
                <div class="logo">
                    <h4>Jinyang Zhang</h4>
                </div>
                <ul class="nav-links">
                    <li><a href="about.html">About</a></li>
                    <li><a href="#">My Work</a></li>
                    <li><a href="contact.html">Contact</a></li>
                </ul>

                <div class="burger">
                    <div class="line1"></div>
                    <div class="line2"></div>
                    <div class="line3"></div>
                </div>
            </nav>
            {%block content%}
            {%endblock%}
        </header>
        <script src="{% static 'home/main.js' %}"></script>
    </body>
</html>

Мне бы хотелось, чтобы, например, когда я нажимал на навигацию «О нас» на странице «Контакты», это приводило меня к http://127.0.0.1:8000/about/, а не http://127.0.0.1:8000/contact/about.html

1 Ответ

2 голосов
/ 06 июня 2019

Это потому, что вы жестко кодируете свой URL внутри пунктов списка.Вместо этого используйте систему шаблонов django, чтобы решить вашу проблему и сделать ваш код более понятным:

Вместо: <li><a href="about.html">About</a></li>

измените его на что-то вроде: <li><a href="{% url 'about' %}">About</a></li>

И в вашем urls.py укажите ваш URL:


urlpatterns = [
    path('about/', about, name="about"),
]

Отредактировано: не помещайте расширение .html в тег "{% url%}.

По мере роста вашего проектаВы можете добавить имя_приложения app в свой файл urls.py и получить доступ к URL-адресу таким образом в шаблонах django.

app_name = "appName"
urlpatterns = [
    path('about/', about, name="about"),
]

, а затем в своем html:

<li><a href="{% url 'appName:about' %}>About</a></li>
'''




Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...