Давайте теперь создадим отдельное Django приложение, которое отвечает за посты:
python manage.py startapp publish
Давайте определим простую модель Post в publish/models.py:
from django.db import models
from django.utils import timezone
from django.contrib.auth import get_user_model
User = get_user_model()
class Post(models.Model):
author = models.ForeignKey(User, on_delete=models.CASCADE)
created = models.DateTimeField('Created Date', default=timezone.now)
title = models.CharField('Title', max_length=200)
content = models.TextField('Content')
slug = models.SlugField('Slug')
def __str__(self):
return '"%s" by %s' % (self.title, self.author)
Привяжем модель Post с администратором Django, для этого в файле publish/admin.py добавим следующий код:
from django.contrib import admin
from .models import Post
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
pass
Наконец, давайте подключим приложение publish к нашему проекту, добавив его в список INSTALLED_APPS.
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'main',
'publish',
]
Не забываем выполнить миграции и теперь мы можем запустить сервер, перейти к http://localhost:8000/admin/ и создать наши первые посты, чтобы у нас было то, с чем можно взаимодействовать:
Давайте двигаться дальше. Следующий очевидный шаг - создать способ просмотра опубликованных постов. Для этого в publish/views.py добавим:
from django.shortcuts import render, get_object_or_404
from .models import Post
def view_post(request, slug):
post = get_object_or_404(Post, slug=slug)
return render(request, 'post.html', context={'post': post})
Давайте свяжем наше новое представление с URL-адресом в: django_celery/urls.py
from django.contrib import admin
from django.urls import path, include
from publish.views import view_post
urlpatterns = [
path('admin/', admin.site.urls),
path('<slug:slug>/', view_post, name='view_post'),
]
Наконец, давайте создадим шаблон, который отображает пост:/templates/post.html.
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
<h1>{{ post.title }}</h1>
<p>{{ post.content }}</p>
<p>Published by {{ post.author.first_name }} on {{ post.created }}</p>
</body>
</html>
Подключим директорию шаблонов templates в секции TEMPLATES в файле настроек settings.py, отредактируем его содержимое таким образом:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR / 'templates'], # new
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
Теперь мы можем перейти к http://localhost:8000/my_first_post/ в браузере. Это не совсем чудо веб-дизайна, но создание красивых страниц постов выходит за рамки этого урока.