Статьи

Использование шаблонов в Django: часть 3

В предыдущей части этого учебного цикла мы показали, как создать простое веб-приложение с использованием Django: как разработать базовый и самый первый веб-сайт с использованием Django .

В этой статье мы увидим, как мы можем использовать шаблоны в Django для рендеринга HTML-кода на веб-странице. Изначально мы жестко закодировали HTML-часть в views (views.py).

Давайте начнем с очень простой идеи о том, как работают шаблоны. Перейдите в каталог, который вы создали в предыдущей части (или в любом другом проекте Django), и запустите оболочку python manage.py (необходимо открыть терминал с помощью этой команды.)

Запустите следующие команды:

Что мы сделали,

  1. Импортированный шаблон модуля.
  2. Создал шаблон с помощью метода Template () . Все внутри ‘ {{}} ‘ являются переменными. В нашем примере у нас есть две переменные: имя и возраст .
  3. Чтобы присвоить значение этой переменной, мы использовали  метод Context () , который принимает словарь python в качестве аргумента.
  4. Теперь мы визуализируем шаблон с помощью метода 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/