Как отображать отдельные заголовки на каждой странице в Django - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть веб-сайт Django, где я разделил файлы html на файл base.html следующим образом:

{% include 'head.html' %}

<body>
    {% include 'nav.html' %}

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

    {% include 'footer.html' %}

    {% include 'scripts.html' %}
</body>


</html>

Из-за включения head.html заголовок на каждой странице имеет вид то же самое, поскольку head.html имеет только 1 заголовок. Вот файл head.html:

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="{% static 'css/materialize.css' %}">
    <link rel="stylesheet" href="{% static 'css/materialize.min.css' %}">
    <link rel="stylesheet" href="{% static 'css/style.css' %}">
    <link rel="stylesheet" href="{% static 'css/custom.css' %}">
    <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
    <title>mytitle</title>
</head>

Но я хочу отображать разные заголовки для разных страниц, и я не знаю, как это сделать. У кого-нибудь есть идеи?

Ответы [ 5 ]

1 голос
/ 13 апреля 2020

база. html

{% include 'head.html' with  title=title %}

<body>
    {% include 'nav.html' %}

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

    {% include 'footer.html' %}

    {% include 'scripts.html' %}
</body>


</html>

views.py

def home(request):
    context = {
       "title":"Home"
     }
   return render(request,"template",context)

head. html

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="{% static 'css/materialize.css' %}">
    <link rel="stylesheet" href="{% static 'css/materialize.min.css' %}">
    <link rel="stylesheet" href="{% static 'css/style.css' %}">
    <link rel="stylesheet" href="{% static 'css/custom.css' %}">
    <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
    <title>{{title}}</title>
</head>
1 голос
/ 13 апреля 2020

Используйте блоки , которые могут быть переопределены :

head. html

...
<title>{% block page_title %}{% endblock %}</title>

my_concrete_page. html

{% extends base.html %}

{% block page_title %}my concrete title{% endblock %}
1 голос
/ 13 апреля 2020

Я даю этот ответ из моих знаний:

Создайте один файл для этого: head. html

<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="{% static 'css/materialize.css' %}">
<link rel="stylesheet" href="{% static 'css/materialize.min.css' %}">
<link rel="stylesheet" href="{% static 'css/style.css' %}">
<link rel="stylesheet" href="{% static 'css/custom.css' %}">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">

создайте другой файл для вашего другого заголовка: title1. html

<title>mytitle</title>

title2. html

<title>mytitle</title>

теперь добавьте в свой основной файл так:

<head>
{% include 'head.html' %}
{% include 'title1.html' %}
</head>
<body>
    {% include 'nav.html' %}

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

    {% include 'footer.html' %}

    {% include 'scripts.html' %}
</body>


</html>

Надеюсь, это сработает для вас.

1 голос
/ 13 апреля 2020

используйте включайте вместо расширения для базы. html и передавайте Dynami c заголовок для базы. html

django ссылка: включает

{% include "base.html" with objects=website.title %}
0 голосов
/ 13 апреля 2020

Мне пришлось объединить идеи @Ivan и @Soham. Я удалил тег заголовка из моего head.html и добавил его в свой base.html. Наряду с этим я использовал перезаписываемый тег блока внутри тега заголовка. Так что теперь мой base.html выглядит следующим образом:

<!DOCTYPE html>
<html lang="en">

{% include 'head.html' %}
<title>{% block title %}{% endblock title %}</title>

<body>
    {% include 'nav.html' %}

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

    {% include 'footer.html' %}

    {% include 'scripts.html' %}
</body>


</html>

И все, что мне теперь нужно сделать, это использовать соответствующие теги на других страницах:

{% extends 'base.html' %}
{% block title %}whatever i want the title to be{% endblock title %}
...