Простое приложение на Django.Instablog.Часть 3.
Сейчас реализуем загрузку постов пользователей. Создадим вьюху , которая наследуется от CreateView.
Все стандартно , но единственное мы переопределили метод form_valid, так как нам надо указать автора , который добавляет пост. Также мы указали поля из модели , которые пользователь должен заполнить при добавлении поста. Это сама фотография и описание к ней. Шаблон будет выглядеть вот таким образом.
Также мы напишем вьюху , которая будет отдельно выводить пост.
Мы могли бы сразу добавить в правило в instablog/urls.py , но это плохая практика , так как в нашем проекте будет много приложений и если все правила будем писать в одном файле , то мы просто запутаемся
Поэтому хорошей практикой считается создание внутри каждого приложения файла urls.py со своими правилами , а потом этот файл мы подключим в главном файле instablog/urls.py
from django.conf import urls
from .views import PhotoListView
app_name = 'blog'
urlpatterns = [
urls.url(r'^$', PhotoListView.as_view(), name='photo-list'),
]
Теперь мы подключаем в главной
from django.conf.urls import url
from django.contrib import admin
from django.conf.urls import url, include
urlpatterns = [
url(r'^blog/', include('blog.urls')),
url(r'^admin/', admin.site.urls),
]
Django по умолчанию нам подключила админку,а мы свою очередь добавили url(r'^blog/', include('blog.urls')),
Теперь мы добавим шаблон, куда будем выводить список фотографий. Так как мы решили применять хорошие практики в нашем проекте , то добавим внутрь приложения blog папку templates/blog/ Так как по умолчанию , PhotoListView будет искать файл в качестве шаблона под названием photo_list.html , то мы создадим такой файл.
Instablog
{% for photo in photos %}
{{ photo }}
{% endfor %}
Теперь при переходе по адресу 127.0.0.1:8000/blog/ мы увидим фотографии с их названием. Названия мы увидим , но фотографий нет. Для этого нам нужно в фвйл instablog/urls.py добавить следующую строчку
from django.conf.urls import url, include
from django.conf import settings
from django.conf.urls.static import static
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^blog/', include('blog.urls')),
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Заключение
На этом все. Мы реализовали вывод постов используя вьюху ListView. Мы для этого даже запрос не написали . Все было сделано за нас. Так как мы следуем хорошим манерам , то мы создали файл url.py в нашем приложении и прописали правила для доступа к нашим постам. Ну и написали небольшой шаблон для вывода постов.