В предыдущей части этого учебного цикла мы показали, как создать простое веб-приложение с использованием Django: как разработать базовый и самый первый веб-сайт с использованием Django .
В этой статье мы увидим, как мы можем использовать шаблоны в Django для рендеринга HTML-кода на веб-странице. Изначально мы жестко закодировали HTML-часть в views (views.py).
Давайте начнем с очень простой идеи о том, как работают шаблоны. Перейдите в каталог, который вы создали в предыдущей части (или в любом другом проекте Django), и запустите оболочку python manage.py (необходимо открыть терминал с помощью этой команды.)
Запустите следующие команды:
Что мы сделали,
- Импортированный шаблон модуля.
- Создал шаблон с помощью метода Template () . Все внутри ‘ {{}} ‘ являются переменными. В нашем примере у нас есть две переменные: имя и возраст .
- Чтобы присвоить значение этой переменной, мы использовали метод Context () , который принимает словарь python в качестве аргумента.
- Теперь мы визуализируем шаблон с помощью метода render () . Он принимает template.Context в качестве аргумента и возвращает строку Unicode. Вы можете сделать шаблон с различным контекстом .
Теперь, чтобы использовать это в проекте. Вы можете написать следующий код в вашем views.py.
views.py
from django.http import HttpResponse from django.template import Template, Context def first_project(request): return HttpResponse("<h3>Welcome to my First Project</h3>") def hello(request): list_books = ['one','two','three'] html = """ <html> <head><title>Homepage | Ronak khunt</title></head> <body> <h1>Welcome {{ uname }}</h1> <ol> {% for book in list_books %} <li>{{book}} ell</li> {% endfor %} </ol> </body></html> """ t = Template(html) c = Context({"uname":'Ronak','list_books':list_books}) return HttpResponse(t.render(c))
Откройте ваш urls.py и установите URL для этого метода ( hello () ) / View. Также обратите внимание на использование цикла for . Использование шаблона не решает проблему жестко закодированного HTML.
Для решения этой проблемы Django предоставляет метод get_template () . Перед использованием этого метода вы установили TEMPLATE_DIRS в вашем settings.py . Откройте файл settings.py и добавьте путь к каталогу, в котором вы хотите хранить HTML-файлы.
settings.py
...... ...... #Don't forget trailing comma at the end. TEMPLATE_DIRS = ( '/home/user/django/first_project/templates', ) ...... ......
Теперь создайте файл hello.html в каталоге шаблонов (вы должны создать этот каталог) и напишите в нем любой код. В нашем случае мы напишем следующий код.
hello.html
<html> <head><title>Homepage | Ronak khunt</title></head> <body> <h1>Welcome {{ uname }}</h1> <ol> {% for book in list_books %} <li>{{book}} ell</li> {% endfor %} </ol> </body> </html>
Теперь откройте файл views.py вашего проекта и добавьте следующий метод.
views.py
#import get_template from template.loader import get_template #other import statement ... def first_project(request): ... def hello(request): ... def hello2(request): t = get_template('hello.html') c = Context({"uname":'Ronak','list_books':list_books}) html = t.render(c) return HttpResponse(html)
Откройте ваш urls.py и установите URL для этого метода (hello2 () ) / View.
Джанго также предоставляет ярлык для этого. Вы можете использовать следующий метод в качестве ярлыка.
views.py
#import render() from django.shortcuts import render #other import statement ... def first_project(request): ... def hello(request): ... def hello2(request): ... def hello3(request): return render(request, 'hello.html', {"uname":'Ronak','list_books':list_books})
Мы также установим URL для этого ( hello3 () ) View. на ваш urls.py будет выглядеть примерно так.
urls.py
from django.conf.urls.defaults import patterns, include, url from firstproject.views import first_project, hello, hello2, hello3 urlpatterns = patterns('', url(r'^first_project/