В части 3.2 мы ознакомились с основными возможностями, которые нам дает админка Django. В этой части мы отобразим список последних двух свежих опросов, который будет доступен пользователям сайта.
Здесь мы делаем подключение роутов приложения polls, если пользователь переходит по адресу http://127.0.0.1:8000/polls .
Параметр namespace="polls" мы используем, чтобы впоследствии использовать неймспейсы в шаблонах.
2. Создадим файл роутов нашего приложения: polls/urls.py:
Данный роут означает, что если пользователь перейдет по адресу http://127.0.0.1:8000/polls/ , то будет задействовано представление IndexView. Это так называемое class based view представление, т.е. представление, основанное на классах.
3. Создадим представление IndexView главной страницы в polls/views.py:
Обратите внимание:
template_name = 'polls/index.html' - мы не стали писать просто 'index.html', т.к. в других приложениях тоже может быть шаблон с таким именем. Можно считать что 'polls/...' здесь своего рода неймспейс.
context_object_name = 'latest_questions_list' - именно такое название в шаблоне будет иметь переменная с данными.
4. Шаблон, используемый представлением IndexView относится к приложению, а не проекту. Поэтому разумно поместить этот шаблон в приложение. Создадим шаблон по адресу polls/templates/polls/index.html:
Продолжение - Опрос (ч.5)
1. Отредактируем файл роутов нашего проекта - firstsite/urls.py:
# -*- coding: utf-8 -*- from django.conf.urls import patterns, include, url from django.contrib import admin admin.autodiscover() urlpatterns = patterns('', # Examples: # url(r'^$', 'firstsite.views.home', name='home'), # url(r'^blog/', include('blog.urls')), url(r'^admin/', include(admin.site.urls)), # Приложение Опросы url(r'^polls/', include('polls.urls', namespace="polls") ), )
Здесь мы делаем подключение роутов приложения polls, если пользователь переходит по адресу http://127.0.0.1:8000/polls .
Параметр namespace="polls" мы используем, чтобы впоследствии использовать неймспейсы в шаблонах.
2. Создадим файл роутов нашего приложения: polls/urls.py:
# -*- coding: utf-8 -*- from django.conf.urls import patterns, include, url from .views import * urlpatterns = patterns('', url(r'^$', IndexView.as_view(), name='index'), )
Данный роут означает, что если пользователь перейдет по адресу http://127.0.0.1:8000/polls/ , то будет задействовано представление IndexView. Это так называемое class based view представление, т.е. представление, основанное на классах.
3. Создадим представление IndexView главной страницы в polls/views.py:
# -*- coding: utf-8 -*- from django.shortcuts import render from django.views.generic import ListView, DetailView from .models import Question, Answer class IndexView(ListView): template_name = 'polls/index.html' context_object_name = 'latest_questions_list' def get_queryset(self): """Вернуть 2 последних свежих опроса""" return Question.objects.order_by('-date_published')[:2]
Обратите внимание:
template_name = 'polls/index.html' - мы не стали писать просто 'index.html', т.к. в других приложениях тоже может быть шаблон с таким именем. Можно считать что 'polls/...' здесь своего рода неймспейс.
context_object_name = 'latest_questions_list' - именно такое название в шаблоне будет иметь переменная с данными.
4. Шаблон, используемый представлением IndexView относится к приложению, а не проекту. Поэтому разумно поместить этот шаблон в приложение. Создадим шаблон по адресу polls/templates/polls/index.html:
<h1>Последние опросы</h1> {% if latest_questions_list %} <ul> {% for question in latest_questions_list %} <li>{{ question.title }}</li> {% endfor %} </ul> {% else %} <p>Опросы не найдены.</p> {% endif %}
Перейдите по адресу, чтобы посмотреть результат: http://127.0.0.1:8000/polls/
Здравствуйте! Спасибо за труды. А как оптимизировать этот код для случая, когда опрос и его результаты встроены в одну страницу, и не имеют собственных url?
ОтветитьУдалитьСпасибо!
Если я правильно понял, то вам нужно, чтобы текст опроса и его результаты располагались на одной странице. В таком случае текст опроса можно получить, перейдя по адресу /polls/3
УдалитьА как отобразить на странице с таким url еще и результаты опроса - тема отдельного разговора. Это не так просто. Возможно вам удастся найти решение, и вы с нами им поделитесь.