не показывает заголовок в django framework - PullRequest
0 голосов
/ 06 февраля 2020

Я новичок в django Framework и я использую VS код

это файл view.py

posts = [
    {
        'author': 'CoreyMS',
        'title': 'Blog Post 1',
        'content': 'First post content',
        'date_posted': 'August 27, 2018'
    },
    {
        'author': 'Jane Doe',
        'title': 'Blog Post 2',
        'content': 'Second post content',
        'date_posted': 'August 28, 2018'
    }
]


def home(request):
    context = {
        'posts': posts
    }
    return render(request, 'blog/home.html', context)

и это мой дом. html файл

<!DOCTYPE html>
<html lang="en">
<head>
          {% if title %}
                <title>Django Blog - {{ title }}</title>
            {% else %}
                <title>Django Blog</title>
            {% endif %}
</head>
<body>
        {% for post in posts %}
        <h1>{{ post.title }}</h1>
        <p>{{ post.content }}</p>
        <p>{{ post.authorname }}</p>
        <p>{{ post.postdate }}</p>
        {% endfor %}

</body>
</html>

часть тела работает нормально, но заголовок не работает, я ожидаю увидеть заголовок, который является первым или вторым сообщением, где проблема? спасибо

Ответы [ 2 ]

1 голос
/ 06 февраля 2020
def home(request):
    context = {
        'posts': posts,
        'title': posts['title']
    }
    return render(request, 'blog/home.html', context)

Но этот вид использования на практике не годится. Это ваша домашняя страница, а не страница поста. вам не нужно указывать c заголовок сообщения на главной странице.

Я рекомендую использовать вот так

  1. Создать модель сообщения
  2. Создать URL-путь для вашего функция просмотра (для страницы публикации)
  3. Создание html страницы для функции просмотра post_page

в models.py и не забудьте перенести модель к базе данных с python manage.py makemigrations и python manage.py migrate

import django.db import models    
class Post(models.Model):
     title = models.CharField(max_length=250)
     slug = models.SlugField(
        max_length=250,
        unique_for_date='publish')
     author = models.ForeignKey(
        User,
        on_delete=models.CASCADE,
        related_name='blog_posts'
     )
     content = models.TextField()
     date_posted = models.DateTimeField(auto_now_add=True)
     # What ever you want you can add
     def __str__(self):
         return self.title

в urls.py выглядит как

urlpatterns = [
   # your paths what ever you have
   path('blog/<slug:post_slug>', views.post_page, name='post_page'),
]

в views.py

from django.shortcuts import render, get_object_or_404
from .models import Post
# and other imports 

def home(request):
    posts = Post.objects.all()
    context = {
        'posts': posts
    }
    return render(request, 'blog/home.html', context)


def post_page(request, post_slug):
    post = get_object_or_404(Post, slug=post_slug)
    # and other operation you want 
    return render(request, 'blog/post_page.html', { 'post': post } )

затем на вашей post_page. html

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

                <title>{{ post.title }}</title>

</head>
<body>
<div>
        {{ post.content }}

</div>
</body>
</html>

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

0 голосов
/ 06 февраля 2020

часть тела работает нормально, но заголовок не работает

Я делаю - он печатает пустую строку для переменной 'title', потому что в вашем заголовке нет переменной 'title' контекст, и это ожидаемое поведение

Я ожидаю увидеть заголовок, который является постом в блоге один или пост в блоге 2

Почему вы ожидаете такую ​​вещь ?? ? Если вы хотите заголовок вашего первого поста, используйте {{ posts.0.title }}. Шаблонный движок НЕ будет пытаться «угадать» что-либо (надеюсь), он просто сделает то, что вы просите.

В чем проблема?

Ну, может быть, передача значения title в вашем контексте может сработать?

def home(request):
    context = {
        'posts': posts,
        'title': "This is my beautiful blog"
    }
    return render(request, 'blog/home.html', context)

Также и FWIW, вы можете сделать свой код шаблона немного более DRY :

<title>Django Blog{% if title %}- {{ title }}{% endif %}</title>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...