Отображение html формы в Django
 
			В предыдущей статье про Django мы создали приложение, модель базы данных и отразили созданную базу в приложении администратора. В сегодняшней статье мы следуя шаблону MVC - (модель, контроллер, шаблон), подключим в файле views.py приложения blog, нашу модель из models.py, и создадим функции для обращения к данным, и отображении их в html шаблоне.
Создание контроллера.
Слой моделей в файле models.py служит для создания и отражения полей базы данных. Следующий слой хранится в папке views.py, он отвечает за то что будет выводиться в ответ на запросы к странице блогa. Слой принимает запрос request и возвращает ответ в виде html шаблона страницы. То есть шаблон будет формироваться динамически в зависимости от данных в нашей базе, а сами данные при этом будут оформляться соответствующими тегами!
      
from django.shortcuts import render
from django.http import HttpResponse
# импорт модели
from .models import Post
def show(request):
    
    #обращение к модели и вывод значений из нее
    posts = Post.objects.all()[:10]
    context = {
        'title':'Post',
        'posts': posts
    }
    # возврат  шаблона с подставленными значениями
    return render(request, "blog/detail.html", context)
Следующим шагом будет создание внутри каталога приложения папки template, со следующей структурой template/blog/file.html. Вложенная папка blog здесь присутствует, во избежание конфликта имен в проекте. Далее, во внутренней папке blog создаем файл index.html, содержащий в себе базовую разметку. И там же создадим detail.html
# index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css">
    <title>Posts</title>
</head>
<body>
    <header class="container center-align">
        <h1>Posts</h1>
    </header>
    <div class="container">
        {% block content %}
        # здесь окажется код с дочерних файлов
        {% endblock %}
        <br>
        <a style="display: block;" class="left" href="/polls">Polls app</a>
        <a style="display: block;" class="center-align" href="/admin">Admin Login</a>
    </div>
</body>
</html>
# detail.html 
{% extends 'blog/index.html' %}
{% block content %}
<h2 class="center-align blue lighten-2">{{title}}</h2>
<ul class="collection">
    {% for post in posts %}
    <li class="collection-item"><a href="/blog/details/{{post.id}}">{{post.title}}</a></li>
    {% endfor %}
</ul>
{% endblock %}
Как можно заметить в обоих файлах есть общая конструкция {% block content %}---{% endblock %}. А в detail.html присутствует {% extends 'blog/index.html' %}. Это и есть шаблонизатор со своим языком. Теперь, при запросе к файлу приложения url.py, будет вызвана функция модуля views.py, которая и вернет страницу с данными.
from django.urls import path 
from . import views
from django.conf.urls import url
urlpatterns = [
      url(r'^details/(?P<id>\d+)/$', views.details, name = 'details'),
     ]
    
Таким образом разделение кода на отдельные компоненты уменьшает их взаимозависимость, а шаблонизатор Django минимизирует написание однообразного кода.
- 
					Создано 23.03.2021 11:20:29  
- 
					 Михаил Русаков Михаил Русаков
 
			 
			 
		 
				 
			 
				 
				 
				 
				
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.