Der Grundgedanke einer Vorlagensprache ist, dass die Sprache in ein anderes Masterdokument „eingebettet“ ist. Es handelt sich um eine Sprache, die die Definition von Platzhaltern ermöglicht, die später im Entwurfsprozess ersetzt werden sollen. Vorlagen ermöglichen die Definition von Platzhaltern, die später ausgefüllt und durch tatsächliche Inhalte ersetzt werden. Die meisten modernen, webbasierten Templatesprachen bieten eine Vielzahl von Funktionen. So ist es zum Beispiel möglich, innerhalb einer Vorlage eine Schleife durch Informationen zu ziehen und eine bedingte Logik bereitzustellen!
Mako ist eine solche Templating-Sprache, die darauf ausgelegt ist, sowohl die Leistung als auch die Einfachheit der Syntax zu maximieren. Ein Hauptmerkmal von Mako ist, dass es die Vertrautheit mit anderen Templatesprachen bietet, aber Verbesserungen an ihnen vornimmt, um den resultierenden Code so lesbar wie möglich zu machen. Mako erlaubt es Ihnen auch, Python-Logik innerhalb der Templates zu schreiben, was es zu einer der am besten gestalteten Templating-Sprachen macht. In diesem Artikel werden wir uns ansehen, wie wir Mako mit Django integrieren können und auch einige der Fehler betrachten, auf die man dabei stößt.
Installation und Einrichtung
Beginnen wir mit der Erstellung des Django-Projekts und passen es anschließend an die Mako-Vorlagen an. Installieren Sie zunächst die folgenden Voraussetzungen, um fortzufahren:
pip install djangomako
Der nächste Schritt besteht darin, ein Django-Projekt und eine Beispielanwendung zu erstellen:
django-admin startproject makoprojectcd makoproject
python manage.py startapp makoapp
Jetzt können wir unser Einstellungs-Backend für die Verwendung von Mako anpassen; das Schreiben eines benutzerdefinierten Backends ist ziemlich einfach. Wir brauchen eine Klasse, die von unserer BaseEngine erbt und die Template-Objekte zurückgibt. Innerhalb dieser Template-Klassen haben wir die Kontrolle über die Logik und das Rendering von Inhalten, genau so, wie wir es wollen.
Fügen Sie zunächst „djangomako“ und den Namen Ihrer Anwendung zur Liste der installierten Anwendungen hinzu:
# settings.py
INSTALLED_APPS = [
# ...
'djangomako',
'makoApp',
]
Fügen Sie dann den unten angegebenen Code ganz unten im Abschnitt Vorlagen ein:
# settings.py
import os
TEMPLATES = [ # ...
{
'BACKEND': 'djangomako.backends.MakoBackend',
'NAME': 'mako',
'DIRS': [
os.path.join(BASE_DIR, 'templates')
],
},]
Der nächste Schritt ist die Anpassung des Pakets djangomako für unser Projekt, da es den alten Import für die statischen Dateien hat. Um dies zu beheben, müssen wir unser Paket djangomako finden. Ein einfacher Weg, dies zu tun, ist, den Projektserver mit zu starten: ‚python manage.py runserver‘ und es wird eine Fehlermeldung ausgegeben, in einer dieser Zeilen wird der Ort der Datei mit dem Namen ‚backend.py‘ stehen. Dies würde in etwa so aussehen:
Hier befindet sich der falsche Import. Der Speicherort dieser Datei ist bei jedem System anders, so dass Sie selbst dorthin navigieren müssen. Wenn Sie VScode verwenden, können Sie auch einfach auf die Zeile mit dem Speicherort klicken und die Datei wird geöffnet.
Gehen Sie nun in der Datei backends.py zu Zeile 14, wie im Bild oben vorgeschlagen, und ändern Sie diese Zeile durch die unten angegebene:
#Old import
from django.contrib.staticfiles.templatetags.staticfiles import static
#New import from django.templatetags.static import static
Wenn Sie danach in derselben Datei in Zeile 204 einen Fehler erhalten, löschen Sie diese Zeile und ersetzen Sie sie durch die folgende Zeile:
#Old import
from django.core.urlresolvers import reverse
#New import
from django.urls import reverse
Als abschließende Kontrolle, ob alles funktioniert hat, starten Sie den Server erneut:
python3 manage.py runserver #Linux/Mac
python manage.py runserver #Windows
Wenn wir jetzt unseren lokalen Server starten, wird alles reibungslos ablaufen. Wenn Sie die volle Kontrolle über dieses Paket haben wollen, können Sie auch einen Ordner mit einer init-Datei im Hauptverzeichnis erstellen. Kopieren Sie backends.py dorthin und es wird als Python-Modul funktionieren!
Als nächstes müssen Sie die URLs in der Datei makoproject/urls.py einrichten:
# makoproject/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('makoApp.urls'))
]
Benutzung der Bibliothek
Jetzt können wir endlich die Mako-Bibliothek in unserer Anwendung verwenden, aber zuerst müssen wir die URLs dafür einrichten. Erstellen Sie dazu eine Datei namens urls.py im Verzeichnis Ihrer Anwendung (makoapp) und fügen Sie die folgenden Zeilen ein:
# makoapp/urls.py
from django.urls import path
from .views import *
urlpatterns = [
path('', MakoView.as_view(), name='home'),
]
Öffnen Sie dann die Datei views.py und fügen Sie den folgenden Code hinzu; dies ist eine einfache Funktion, die nur einige vordefinierte Namen anzeigt, obwohl sie auch durch die Modelle oder Formulare geleitet werden könnte.
# views.py
from django.shortcuts import render
from django.views.generic import TemplateView #get the mako template to views
class MakoView(TemplateView):
template_name = "home.mako" #define the template name
def get_context_data(self, **kwargs):
context = super(MakoView, self).get_context_data(**kwargs) #get the makoview to the thempltes
context.update({
'names': [
'User',
],
})
return context
Zu guter Letzt müssen Sie ein Verzeichnis „templates“ auf der Stammebene unseres Projekts anlegen und darin eine Datei „home.mako“ erstellen (Sie können aber auch die Erweiterung .html verwenden). Danach können Sie den folgenden Code in die Datei einfügen:
#templates/home.mako
#Example to showcase the view function
<p>Welcome to mako template</p>
<ul>
% for name in names:
<li>${ name }</li>
% endfor
</ul>
#Example to show Mako's integrated capablities
<%
from random import randint
numbers = [randint(1,10) for _ in range(10)]
%>
<ul>
% for n in numbers:
<li>${n}</li>
% endfor
</ul>
Und wir sind fertig!
Wie Sie sehen können, wird das erste Beispiel die Funktion ausgeben, die wir in den Ansichten erstellt haben und die den vordefinierten Namen ausgeben soll. Aber das ist nichts Besonderes, DTL könnte das auch tun.
Im zweiten Beispiel ist jedoch ein beliebiger Python-Code in die Vorlage eingefügt. Es handelt sich um ein einfaches Programm, das 10 Zufallszahlen ausdruckt und sie über den HTML-Tag in die Vorlage überträgt.
Ergebnisse
Nachdem Sie alle oben genannten Schritte durchgeführt haben, können Sie nun den Django-Entwicklungs-Webserver starten, um Ihre Ergebnisse anzuzeigen. Sie können den Server mit dem folgenden Befehl starten:
python3 manage.py runserver #Linux/Mac
python manage.py runserver #Windows
Wenn der Server erfolgreich gestartet wurde, besuchen Sie den angegebenen Link, d. h. diesen http://127.0.0.1:8000/. Wenn alles gut funktioniert hat, sehen Sie eine Seite wie diese:
Schlussfolgerung
Mako ist einfach zu erlernen, aber es ist auch eine extrem leistungsfähige Template-Engine. Sie kann die volle Kraft von Django entfesseln, um dynamische, inhaltsreiche Seiten zu erstellen. Aber es gibt einige Dinge, die Sie lernen müssen, um es zu benutzen, wie zum Beispiel die Tags. Aber die vielen Funktionen, die es bietet, reichen aus, um viele Leute dazu zu bringen, es zu benutzen.
In diesem Artikel haben wir uns angeschaut, wie wir Mako mit Django integrieren können und auch einige der Fehler, auf die Leute dabei stoßen, betrachtet. Wir hoffen, dass dieser Artikel Ihnen bei der Integration von Mako mit Django geholfen hat. Wenn Sie weitere Fragen oder Bedenken zu diesem Thema haben, können Sie uns jederzeit kontaktieren. Wenn Sie auf der Suche nach einer Templatesprache für Ihr nächstes Projekt sind, empfehlen wir Ihnen einen Blick auf Mako zu werfen.
Dein Kommentar wartet auf die Überprüfung durch einen Moderator.
„Дело „Лайф-из-Гуд“ — „Гермес“ — „Бест Вей“: свидетель обвинения объявила себя потерпевшей от следствия
[url=https://www.kp.ru/daily/27582/4852582/]Потерпевшие Гермес[/url]
6 и 13 июня Приморский районный суд города Санкт-Петербурга, рассматривающий по существу уголовное дело № 1-504/24, связываемое с компаниями „Лайф-из-Гуд“, „Гермес“ и кооперативом „Бест Вей“, провел очередные, шестое и седьмое по счету, заседания, посвященные допросу свидетелей обвинения и лиц, признанных следствием потерпевшими в рамках судебного следствия по делу
На заседаниях были заслушаны показания граждан, как признанных потерпевшими, так и свидетелей обвинения. Показания приводятся по аудиозаписи, имеющейся в распоряжении редакции, и стенограмме, которую вела сторона защиты.
Справка
Предварительное расследование уголовного дела осуществлялось ГСУ ГУ МВД России по Санкт-Петербургу и Ленинградской области. На скамье подсудимых — десять граждан: Анна Высоцкая (за полгода до ареста уволилась из „Лайф-из-Гуд“, до августа 2021 года работала ивент-менеджером „Лайф-из-Гуд“, в СИЗО более двух лет), Александра Григорьева (директор одного из „технических“ юрлиц „Лайф-из-Гуд“, в СИЗО более двух лет), Михаил Измайлов (предприниматель, в СИЗО более двух лет), Елена Соловьева (главный бухгалтер ООО „Эксперт“, в СИЗО более двух лет), Альмира Гильберт (неработающая, в СИЗО с 2023 года), Дмитрий Мазанов (предприниматель, в СИЗО с 2023 года), Анатолий Наливан (предприниматель и региональный уполномоченный кооператива, в СИЗО с 2023 года), Денис Шишко (предприниматель, в СИЗО с 2023 года), Дмитрий Выдрин (неработающий, под домашним арестом) и 83-летний отец Романа Василенко, основателя компании „Лайф-из-Гуд“ и кооператива „Бест Вей“, Виктор Василенко (пенсионер, под запретом определенных действий). Начиная рассмотрение по существу, Приморский районный суд продлил всем подсудимым меры пресечения на полгода, что оспаривается адвокатами в вышестоящих судах.
Всем подсудимым предъявлены обвинения как в мошенничестве (ч. 4 ст. 159 УК РФ) и создании финансовой пирамиды (ч. 2 ст. 172.2 УК РФ), так и в организации преступного сообщества (ч. 3 ст. 210 УК РФ). Их, а также гражданских ответчиков — прежде всего кооператив „Бест Вей“ — защищают почти два десятка адвокатов.
В уголовном деле 221 лицо, признанное следствием потерпевшим, предъявляющее претензии как к компании „Гермес“, так и к кооперативу „Бест Вей“ (для сравнения: у компании „Гермес“ не одна сотня тысяч клиентов в России, у кооператива „Бест Вей“ — около 20 тыс. пайщиков). Общая сумма ущерба в уголовном деле — 282 млн рублей, при этом на счетах кооператива арестовано около 4 млрд рублей, примерно столько же арестовано на счетах частных лиц.
„К кооперативу претензий не было, следователь предложил подать заявление“
Признанный следствием потерпевший Болян подсудимых не знает. Был клиентом „Гермеса“, а также пайщиком кооператива — но до 2019 года. В 2019-м он вышел из кооператива и из „Гермеса“, ему были возвращены паевые взносы, и никаких претензий к кооперативу у него не было — что он письменно подтвердил, расторгая договоры с этими организациями.
Однако, как Болян отметил на суде, следователь убедил его в том, что он — потерпевший и должен подать заявление на возврат членских взносов. Заявление в МВД писать не хотел, на него вышли сотрудники, сначала претензий к кооперативу не было. Полиция ему объяснила, что можно получить деньги.
Стал клиентом „Гермеса“ и пайщиком кооператива через своего консультанта Алексея Виноградова. Виноградов — грамотный маркетолог, он ему верил, тот не работал в кооперативе. Что было предметом договора в „Гермесе“, не помнит. В „Гермес“ внес 100 и 700 евро, а в кооператив каждый месяц вносил по 12 тыс. в течение семи месяцев.
Вышел и из кооператива, и из „Гермеса“ в 2019 году. Зачем вступал? „Наверное, квартиру купить хотел“. Кооператив вернул ему 70 тыс. паевых взносов, „Гермес“ вернул со счета „Виста“ 140 тыс. рублей.
В кооперативе деньги вернули почти сразу, удержав вступительный и членские взносы; в „Гермесе“ вернули позже через „внутрянку“, но удержали комиссию.
Утверждает, что ему говорили, что можно со счета „Виста“ вносить деньги в кооператив. Объясняли, что деньги передаются в доверительное управление трейдерам и брокерам, которые играют на бирже. В кооперативе, как он утверждает, можно было купить место в очереди. По его словам, „Гермес“ и кооператив — по сути, одна организация. Требует взыскать с кооператива более 148 тыс. рублей — вступительный и членские взносы, и более 60 тыс. рублей с „Гермеса“ — комиссию при выводе средств.
Договор с кооперативом не читал, но ему объяснили, что есть невозвратная часть денег — ее и не вернули, „но хочу попытаться вернуть“. Претензий к кооперативу „как бы и нет, но если вернут взносы, то будет хорошо“.
К Виноградову претензий не предъявлял. „Может, меня и не обманули в кооперативе“, -резюмировал свое выступление в суде Болян.
„Болян — яркий пример „возгонки потерпевших“, которой занималось следствие для того, чтобы нарисовать максимально большую цифру потерпевших от деятельности „Гермеса“, — подчеркивают адвокаты. — Реального ущерба просто нет, да люди, по сути, и не считают себя потерпевшими. 221 лицо, признанное потерпевшим на фоне количества клиентов „Гермеса“ и числа пайщиков кооператива „Бест Вей“, не впечатляет. И, как мы видим, значительная часть из этого числа — ненастоящие потерпевшие, а некие лица, пытающиеся получить небольшие суммы, на которые у них нет никаких прав“.
„Требую выплатить с учетом роста цен на недвижимость“
Признанная следствием потерпевшей Комова была как клиентом „Гермеса“, так и пайщиком кооператива. Подсудимых не знает. Требует более 8800 тыс. с кооператива и более 2700 тыс. с „Гермеса“. При этом из кооператива она не вышла и заявление о выходе не подавала. Сумма требований к кооперативу включает как паевые и членские взносы, так и оценку роста цен на недвижимость, которая не была приобретена.
Утверждает, что можно переводить деньги со счета „Виста“ напрямую в кооператив — в подтверждение приводит скрины переписки с консультантами в смартфоне. Суд разъясняет, что доказательство может быть приобщено позднее при надлежащем оформлении.