Първи стъпки с Django - Добавяне на страници - Как да станете програмист
За да добавите страници към вашия сайт, трябва да разберете логиката зад това как работи Django.
За работата на нашия сайт ще създадем 4 изгледа
- "index" - главна страница - ще покаже последните няколко въпроса
- “detail” - ще покаже конкретен въпрос и ще ви позволи да изберете опция за отговор
- "резултати" - ще покаже резултатите от конкретен въпрос
- отделен изглед за процеса на гласуване
Създаване на първия изглед
Отворете polls/views.py и добавете следния код там:
Това е най-простата възможна функция View в Django. За да получим достъп до него, трябва да нанесем URL адрес към него - а за това се нуждаем от URLconf.
За да дефинирате URLconf в приложението за анкети, създайте файл urls.py в него. Вашата директория с приложения трябва да изглежда така:
Във файла polls/urls.py добавете:
Остава да добавите генерирания файл към основния URLconf, дефиниран във файла mysite/urls.py. Вмъкнете include(), за да получите следното:
Сега отворете http://localhost:8000/polls/ във вашия браузър и ще видите текста „Здравей, свят. Вие сте в индекса на анкетата.“, което написахме в изгледа на индекса.
Функцията url() приема 4 аргумента, от които два - regex и view - са задължителни, а два могат да бъдат пропуснати: kwargs и name.
url() аргумент: регулярен израз
Тези регулярни изрази не дефинират GET или POST параметри, нито името на домейна, където се намира сайтът. Например, когато поиска http://www.example.com/myapp/, URLconf ще търси myapp/. Когато се поиска http://www.example.com/myapp/?page=3, URLconf също ще търси myapp/.
Опитайте се да използвате възможно най-прости регулярни изрази, тъй като тяхната сложност може да повлияе на производителността и скоростта на сайта.
url() аргумент: изглед
Когато Django намери съвпадение на регулярен израз, Django извиква определената функция за изглед, с обект HttpRequest като първи аргумент и всички „уловени“ стойности от регулярния израз като други аргументи. Ако регулярният израз използва прости прихващания, стойностите се предават като позиционни аргументи; ако използва наименувани прихващания, стойностите се предават като аргументи на ключови думи. След малко ще дадем пример за това.
url() аргумент: kwargs
Аргументи на произволни ключови думи могат да бъдат предадени в речник към целевия изглед. Няма да използваме тази функция на Django в урока.
url() аргумент: име
Наименуването на вашия URL ви позволява да го посочите недвусмислено от другаде в Django, особено шаблони. Тази мощна функция ви позволява да правите глобални промени в URL моделите на вашия проект, докато докосвате само един файл.
Добавяне на изгледи
Давайте добавете необходимите ни мнения в polls/views.py. Колко в този случай трябва да предадем параметр — номер на въпроса — те ще бъдат малко по-различни:
Съответно за тяхната работа добавям нови URL адреси на шаблони в polls.urls:
Сега, ако поискаме в браузъра http://localhost:8000/polls/23/, Django извиква метода detail() и изобразява ID, който сме посочили в URL.
Когато Django получава заявка към сайта, първо се зарежда модулът mysite.urls, тъй като той е указан в параметра ROOT_URLCONF в settings.py. Той намира променливи urlpatterns и преминава по реда на пречислените в неговите регулярни изражения. Функцията include() позволява включване в списъка URLconfs, определени в друго място. Обърнете внимание, че редовното изобразяване за include() се заканчва със символ $, обозначаващ края на реда. но завършва се слешем (/).
Добавяме логика във функции изгледи
Всяка функция за изглед е отговорна за две неща. Той връща обект HttpRespons, който съдържа съдържанието на заявената страница. Или трябва да хвърли изключение Http404, ако страницата, която търсите, не съществува.
Иначе сме свободни да правим каквото си поискаме. View има достъп до обекти на база данни, генерира PDF документ или ZIP архив, използва всяка библиотека на Python. Без ограничение.
Ще използваме Django API за работа с базата данни. За да върнете последните 5 въпроса, когато се извика index(), използвайте следния код:
Django също ни предлага възможността да използваме шаблони на страници, така че да не се налага да генерираме HTML всеки път.
Използване на HTML шаблони в Django
Създайте директория с шаблони в анкетите. Там Django ще търси шаблони за това приложение.
Параметърът TEMPLATE_LOADERS указва списък с извикващи се, които знаят как да импортират шаблони от различни източници.
Един такъв метод, включен по подразбиране, е django.template.loaders.app_directories.Loader. Той търси директорията "templates" в директорията на приложенията, посочена в INSTALLED_APPS. Друга възможност да уведомите Django къде да търси вашите шаблони е да промените настройката TEMPLATE_DIRS,
Добавете следния код към шаблона:
Сега нека актуализираме изгледа на индекса в polls/views.py, за да използваме шаблона:
Този код зарежда шаблон, наречен polls/index.html, и му предава контекст. Контекстът е речник, съдържащ променливи - обекти на Python - които ще бъдат налични в шаблона.
Когато заредите страницата “/polls/”, ще видите неподреден списък с въпроси, като всеки елемент в списъка има връзка към страницата с подробности за този конкретен въпрос.

извикване за рендериране()
Стандартният подход е да заредите шаблона, да попълните контекста и да върнете обект HttpResponse със страница, генерирана от шаблона. Django предоставя функцията render() за това. Нека пренапишем нашия изглед index():
Функцията render() приема обекта на заявката като първи аргумент, името на шаблона като втори и речник, съдържащ обектите за изобразяване на страницата като незадължителен трети. След изобразяването на страницата, render връща обект HttpResponse.
404 грешка
Сега нека обработим детайлния изглед. Тази страница ще покаже въпроса и опциите за отговор към него с избор. В този случай, ако исканият въпрос не е в базата данни, трябва да върнете грешка 404.
Ако сега се опитате да отворите страница за един от съществуващите въпроси, Django ще върне грешкатаTemplateDoesNotExist.
Създайте файл polls/detail.html със следното съдържание:
get_object_or_404() функция
Когато получаваме обект от базата, обикновено използваме get() и повдигаме Http404, ако обектът не съществува. Django предоставя функцията get_object_or_404() за това.
Нека пренапишем изгледа detail():
Извикването на get_object_or_404() приема дефинирания от Django модел като първи аргумент и произволен брой ключове, които да бъдат предадени на дефинирания от модела метод get(). Ако обектът не съществува, ще се появи грешка 404.
Има също get_list_or_404(), който е подобен на get_object_or_404(), с изключение на това, че използва метода filter() вместо get(). Тази функция повдига Http404, ако получи празен списък.
Завършване на шаблон
Нека финализираме шаблона, който показва детайлите на конкретен въпрос, който се извиква в детайлен () изглед:
Вижте ръководството за HTMLшаблони - ръководство за шаблони - за повече информация.
Премахване на твърди URL адреси в шаблони
В шаблона polls/index.html ние твърдо кодирахме частта за връзката:
Сега, ако искате да промените URL адреса от polls/ на нещо друго, достатъчно е да го направите във файла polls/urls.py.
Име URL
Досега сме използвали само едно приложение за анкети. В реален проект може да има 5-10 или повече приложения и всяко от тях може да използва детайл. За да може Django да определи правилното име, трябва да използвате по-конкретни имена или да добавите пространства от имена към главния URLconf. В mysite/urls.py включете пространство от имена:
Сега трябва да променим polls/index.html:
заменете с низ, указващ пространство от имена
Сега всички основни страници на сайта са създадени. Нека свържем формулярите, за да дадем възможност за гласуване!
Благодаря ви за статията, единственото нещо в yurls е малка грешка, има допълнителна наклонена черта в регулярните изрази. И така, нормално))
Закъсал при създаването на първите изгледи. От самото начало направих всичко изключително според инструкциите, но по някаква причина не мога да коригирам грешката в тази стъпка: TypeError: 'function' object has no attribute '__getitem__'
ругае файла polls\urls.py
от изгледи за импортиране на анкети
urlpatterns = patterns[", url(r'^articles/$', views.index) ]
или в тип терминал sudo pip инсталирайте Django==1.8
polls.urls допълнителна наклонена черта urlpatterns = [ url(r'^$', views.index, name='index'), url(r'^(?P\d+)/$', views.detail, name='detail'), url(r'^(?P\d+)/results/$', views.results, name='results'), url( r'^(?P\d+)/vote/$', views.vote, name='vote') ]
Редовете за Django 1.8+ трябва да бъдат заменени с: