Реклама является популярным инструментом преобразования Text-HTML для веб-автористов. Это гораздо легче использовать, чем простые старые HTML. Многие/большинство статических генераторов сайта обеспечивают встроенный способ написания сообщений с использованием Markdown, однако добавляя его на веб-сайт Django – например, в блоге – требует дополнительного шага или два. В этом руководстве я продемонстрирую, как быстро добавить функциональность Markdown на любой веб-сайт Django.
Этот пост предполагает знание Django и как построить блог. Если вам нужен подробный обзор процесса, проверьте мою книгу Django для начинающих который проходит через здание 5 постепенно более сложных веб-приложений, включая блог!
Но на данный момент давайте начнем в командной строке с обычной командой для установки Django, создать новый проект под названием config Настройте начальную базу данных, используя config и начиная локальный веб-сервер, используя Runserver команда. Я добавил шаги для установки этого кода на рабочем столе, что удобно для пользователей Mac, но каталог кода может жить в любом месте на вашем компьютере.
$ cd ~/Desktop $ mkdir markdown && cd markdown $ pipenv install django==3.0.3 $ pipenv shell (markdown) $ django-admin startproject config . (markdown) $ python manage.py migrate (markdown) $ python manage.py runserver
Перейти к http://127.0.0.1:8000. Для подтверждения страницы приветствия Django появляется как предназначено.
Приложение блога
Теперь остановите локальный сервер с Контроль + C и создать наши основные Блог приложение.
(markdown) $ python manage.py startapp blog
На обычном, мы должны явно добавить приложение для Stall_apps Конфигурация внутри config/settings.py Отказ
# config/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog.apps.BlogConfig', # new
]
Обновите config/urls.py Файл, чтобы включить наше приложение для блога, которое будет иметь путь URL '' пустая строка.
# config/urls.py
from django.contrib import admin
from django.urls import path, include # new
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('blog.urls')), # new
]
Модели, URL, просмотры, шаблоны
На данный момент нам нужно четыре обновления в наших Блог приложение:
Models.pyДля модели базы данныхURLS.PYдля URL-маршрутаПросмотр .pyдля нашей логикиШаблоны/post_list.html.Для нашего шаблона
Порядок, в котором мы делаем эти изменения, не имеет значения; Нам нужны все они до того, как функциональность будет работать. Однако на практике, начиная с моделей, то URL, то взгляды, и, наконец, шаблоны – это подход, который я обычно беру.
Начните с Блог/Модели .py Отказ
# blog/models.py
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=200)
body = models.TextField()
def __str__(self):
return self.title
Мы должны создать наши Блог/URLS.PY Файл вручную.
(markdown) $ touch blog/urls.py
Затем добавьте один путь к Блог/URLS.PY для ListView Для отображения всех постов, которые импортируют представление «Вызов» BloglistView Отказ
# blog/urls.py
from django.urls import path
from .views import BlogListView
urlpatterns = [
path('', BlogListView.as_view(), name='blog_list'),
]
Вот наш Блог/просмотр .py файл.
# blog/views.py
from django.views.generic import ListView
from .models import Post
class BlogListView(ListView):
model = Post
template_name = 'post_list.html'
Шаблон будет жить в пределах Шаблоны каталог в нашем Блог приложение Так что давайте создадим это и файл, post_list.html. , сейчас.
(markdown) $ mkdir blog/templates (markdown) $ mkdir blog/templates/post_list.html
Шаблон петли над Object_List от ListView и отображает оба поля в нашей модели блога.
{% for post in object_list %}
{{ post.title }}
{{ post.body }}
{% endfor %}
Чтобы завершить его, создайте файл миграции и примените его в нашу базу данных.
(markdown) $ python manage.py makemigrations blog (markdown) $ python manage.py migrate
Админ
Мы все устанавливаем, но … нам нужен способ вводить данные в наше приложение! Мы могли бы настроить формы на сам веб-сайт для этого, однако более простой подход – использовать встроенный Админ приложение.
Создать Суперзор учетная запись Таким образом, мы можем получить доступ к Админ Отказ
(markdown) $ python manage.py createsuperuser
Запустите локальный сервер снова, запустив Python Manage.py Runserver и войдите в http://127.0.0.1:8000/admin. .
Приложения не появляются в админике, если мы явно не добавляем их, так что сделайте это сейчас, обновляя Блог/admin.py Отказ
# blog/admin.py from django.contrib import admin from .models import Post admin.site.register(Post)
Обновить страницу администратора сейчас и Блог Приложение появляется вместе с нашими Сообщения Модель (администратор автоматически добавляет «S» на модели). Нажмите на ссылку «+ Добавить» и создайте сообщение, написанное в Markdown.
Нажмите кнопку «Сохранить» в правом нижнем углу и перейдите к нашей домашней странице. Текст выводится без какого-либо форматирования.
Отметка
То, что мы хотим, это автоматически преобразовать нашу уценку на отформатированную HTML на сайте. Один вариант – использовать сторонний пакет, такой как Django Markdownx. , который включает в себя дополнительные функции, такие как живые редактирование, превью, размер изображения и другие, которые стоит изучить.
Тем не менее, это сверхугольника сейчас, а также аспекты, что происходит под капотом. Две доминирующие пакеты Markdown являются Реклама и Markdown2. . Мы будем использовать Реклама В этом примере.
Во-первых, остановить локальный сервер Контроль + C и установить Реклама Отказ
(markdown) $ pipenv install markdown==3.2.1
Мы создадим пользовательский фильтр шаблона, который использует Markdown. Создать Templatetags каталог в наших Блог приложение а затем markdown_extras.py файл.
(markdown) $ mkdir blog/templatetags (markdown) $ touch blog/templatetags/markdown_extras.py
Сам файл импортирует Реклама Пакет и используйте Огороженный код Code расширение. Как отмечено в документах Есть несколько функций, доступных здесь, так что прочитайте документы.
# blog/templatetags/markdown_extras.py
from django import template
from django.template.defaultfilters import stringfilter
import markdown as md
register = template.Library()
@register.filter()
@stringfilter
def markdown(value):
return md.markdown(value, extensions=['markdown.extensions.fenced_code'])
Теперь мы загружаем пользовательский фильтр в наш шаблон, чтобы содержимое, написанное в Markdown, будет выводиться в качестве HTML для тело поле.
{% load markdown_extras %}
{% for post in object_list %}
{{ post.title }}
{{ post.body | markdown | safe }}
{% endfor %}
Вот и все! Если вы теперь перезагрузите веб-сайт и просмотрите нашу веб-страницу, уценка мы написали в админике до того, как сейчас отображается правильно.
Следующие шаги
В настройке производства есть несколько дополнительных шагов, которые вы хотите взять. Используйте Django Формы которые поставляются с рядом встроенных ограждений. А также добавить отбеливатель для дополнительного слоя санитарии. Есть Django-beleach Пакет, который стоит посмотреть в этом отношении.
Оригинал: “https://dev.to/learndjango/django-markdown-tutorial-3d43”