Latest web development tutorials

قالب جانغو

في الفصل الأخير نستخدم django.http.HttpResponse () لإخراج "مرحبا العالم!". الطريقة التي يتم بها خلط البيانات جنبا إلى جنب مع وجهة نظر، لا تفي MVC فكر في جانغو.

هذا الفصل سوف نشرح لك جانغو قالب التطبيق، القالب هو نص للعرض وثيقة منفصلة المحتوى.


أمثلة تطبيق قالب

تابعنا سيتم إنشاء القسم السابق من المشروع تحت HelloWorld دليل قوالب الدليل وإنشاء ملف hello.html، بنية الدليل بأكمله كما يلي:

HelloWorld/
|-- HelloWorld
|   |-- __init__.py
|   |-- __init__.pyc
|   |-- settings.py
|   |-- settings.pyc
|   |-- urls.py
|   |-- urls.pyc
|   |-- view.py
|   |-- view.pyc
|   |-- wsgi.py
|   `-- wsgi.pyc
|-- manage.py
`-- templates
    `-- hello.html

كود ملف hello.html على النحو التالي:

<h1>{{ hello }}</h1>

ونحن نعلم من متغير قالب لاستخدام الأقواس المزدوجة.

ثم نأتي إلى شرح مسار ملف قالب جانغو، تعديل HelloWorld / settings.py، تعديل القوالب للتطبيق الاستعراض المفصلل[BASE_DIR + "/ قوالب"، ]، على النحو التالي:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR+"/templates",],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

نحن الآن تعديل view.py، إضافة وجوه جديدة، لتقديم البيانات إلى قالب:

# -*- coding: utf-8 -*-

#from django.http import HttpResponse
from django.shortcuts import render

def hello(request):
    context          = {}
    context['hello'] = 'Hello World!'
    return render(request, 'hello.html', context)

يمكننا أن نرى أن كنا هنا بدلا من ذلك تقديم HttpResponse قبل الاستخدام. تقدم أيضا يستخدم سياق القاموس كمعلمة.

العناصر الرئيسية في القاموس السياق "مرحبا" تتوافق مع المتغيرات في قالب "{{مرحبا}}".

ثم زيارة زيارة http://192.168.45.3:8000/hello/، تستطيع أن ترى في الصفحة:

ثم أكملت نحن القالب لاستخدام بيانات الإخراج، مما يتيح الفصل عرض البيانات.

بعد ذلك، سوف نقدم للقواعد النحو نموذج مشترك.


علامات قالب جانغو

إذا / العلامة شيء آخر

بناء الجملة الأساسية هي كما يلي:

{% if condition %}
     ... display
{% endif %}

أو:

{% if condition1 %}
   ... display 1
{% elif condiiton2 %}
   ... display 2
{% else %}
   ... display 3
{% endif %}

وفقا للشروط لتحديد ما إذا كان الانتاج. إذا / آخر يدعم متداخلة.

{٪ إذا٪} تقبل العلامة و، أو أو عدم جعل الحكم على الكلمات الرئيسية لمتغيرات متعددة، أو المتغيرات انتفى (لا)، على سبيل المثال:

{% if athlete_list and coach_list %}
     athletes 和 coaches 变量都是可用的。
{% endif %}

للتسميات

{٪ ل٪} يسمح لنا لتكرار أكثر من التسلسل.

وحالة بايثون لتصريحات مماثلة، تركيب الحلقة هو X في Y، Y هو تسلسل لحلقة مرارا وX هو اسم المتغير المستخدمة في كل دورة معينة.

في كل مرة خلال الحلقة، سيقوم النظام قالب يجعل كل {٪ ل٪} {٪ ENDFOR٪} المحتوى بين و.

على سبيل المثال، ونظرا لقائمة المتغيرات الرياضيين athlete_list، يمكننا استخدام التعليمات البرمجية التالية إلى عرض هذه القائمة:

<ul>
{% for athlete in athlete_list %}
    <li>{{ athlete.name }}</li>
{% endfor %}
</ul>

تسمية لإضافة قائمة إلى أن عكس ذلك أن مكرر العكسي:

{% for athlete in athlete_list reversed %}
...
{% endfor %}

يمكنك أن تتداخل {٪ ل٪} العلامة:

{% for athlete in athlete_list %}
    <h1>{{ athlete.name }}</h1>
    <ul>
    {% for sport in athlete.sports_played %}
        <li>{{ sport }}</li>
    {% endfor %}
    </ul>
{% endfor %}

ifequal / العلامة ifnotequal

{٪ Ifequal٪} العلامة يقارن قيمتين، عندما تكون على قدم المساواة، يعرض كافة القيم في {٪ ifequal٪} و {٪ endifequal٪} يجري.

المثال التالي يقارن المستخدم متغيرات قالب واثنين من currentuser:

{% ifequal user currentuser %}
    <h1>Welcome!</h1>
{% endifequal %}

و{٪ إذا٪} وبالمثل، {٪ ifequal٪} تدعم اختيارية {٪ آخر النسبة} العلامة: 8

{% ifequal section 'sitenews' %}
    <h1>Site News</h1>
{% else %}
    <h1>No News Here</h1>
{% endifequal %}

ملاحظات تبويب

شروح جانغو باستخدام {##}.

{# 这是一个注释 #}

فلتر

يمكن عرض مرشح قالب في متغير قبل تعديله، حرف توجيه التصفية، على النحو التالي:

{{ name|lower }}

{{اسم}} المتغير بعد أن أقل معالجة التصفية، توثيق تحويل النص إلى أحرف صغيرة الأحرف الكبيرة.

مأخذ الأنابيب مرشح يمكن أن يكون * *، كلا أقول، وأنابيب تصفية إخراج، ويمكن استخدامها كمدخل إلى خط أنابيب المقبل:

{{ my_list|first|upper }}

العنصر الأول من المثال أعلاه وتحويلها إلى أحرف كبيرة.

بعض المرشحات لها المعلمات. بعد المعلمات مرشح متبوعا بنقطتين ونقلت دائما مزدوجة. على سبيل المثال:

{{ bio|truncatewords:"30" }}

وهذا المتغير عرض 30 الكلمات الأولى من الحيوية.

مرشحات أخرى:

  • addslashes: لإضافة مائل مائل أمام أي اقتباس مفردة أو علامات اقتباس مزدوجة.
  • تاريخ: اضغط على شكل شكل حجة سلسلة تاريخ محدد أو مثيل كائن التاريخ والوقت:
    {{ pub_date|date:"F j, Y" }}
  • طول: إرجاع طول متغير.

تشمل العلامة

{٪ تضمن٪} هذا الكود يسمح المحتويات الأخرى التي تحتوي على القالب في قالب.

يتم تضمين المثالان قالب nav.html:

{% include "nav.html" %}

الميراث قالب

يمكن قوالب يرث وسيلة لتحقيق مضاعفة.

المقبل، ونحن إنشاء دليل القوالب قبل إضافة ملف المشروع base.html، على النحو التالي:

<html>
  <head>
    <title>Hello World!</title>
  </head>

  <body>
    <h1>Hello World!</h1>
    {% block mainbody %}
       <p>original</p>
    {% endblock %}
  </body>
</html>

رمز أعلاه، علامة كتلة اسمه وسم الهيئة الأساسية هي أنه يمكن أن يكون خلفاء لتحل محل أجزاء.

كل {٪ كتلة٪} العلامة يحكي محرك قالب قوالب الطفل يمكن تجاوز هذه الأجزاء.

hello.html الموروثة base.html، واستبدال كتلة معينة، وhello.html كود تعديلها كما يلي:

{% extends "base.html" %}

{% block mainbody %}
<p>继承了 base.html 文件</p>
{% endblock %}

السطر الأول من التعليمات البرمجية يوضح hello.html الموروثة ملف base.html. يمكننا أن نرى هنا نفس اسم العلامة كتلة لاستبدال كتلة المقابلة base.html.

إعادة النظر في عنوان http://192.168.45.3:8000/hello/، نتائج الإخراج هي كما يلي: