Django 2.1 - The flatpages app

फ़्लैटपेज ऐप




django

फ़्लैटपेज ऐप

Django एक वैकल्पिक "फ्लैटपेज" एप्लिकेशन के साथ आता है। यह आपको डेटाबेस में सरल "सपाट" एचटीएमएल सामग्री को संग्रहीत करने की सुविधा देता है और Django के व्यवस्थापक इंटरफ़ेस और पायथन एपीआई के माध्यम से आपके लिए प्रबंधन को संभालता है।

एक फ्लैटपेज एक यूआरएल, शीर्षक और सामग्री के साथ एक साधारण वस्तु है। एक-ऑफ, विशेष-केस पेजों, जैसे कि "अबाउट" या "प्राइवेसी पॉलिसी" पेजों के लिए इसका उपयोग करें, जिसे आप एक डेटाबेस में संग्रहित करना चाहते हैं, लेकिन जिसके लिए आप एक कस्टम Django एप्लिकेशन विकसित नहीं करना चाहते हैं।

एक फ़्लैटपेज कस्टम टेम्प्लेट या डिफॉल्ट, सिस्टमवाइड फ़्लैटपेज टेम्प्लेट का उपयोग कर सकता है। यह एक, या एकाधिक, साइटों से संबद्ध हो सकता है।

यदि आप अपनी सामग्री को कस्टम टेम्पलेट में रखना पसंद करते हैं, तो सामग्री फ़ील्ड वैकल्पिक रूप से रिक्त रह सकती है।

यहाँ Django द्वारा संचालित साइटों पर फ्लैटपेज़ के कुछ उदाहरण दिए गए हैं:

स्थापना

फ़्लैटपेज एप्लिकेशन को स्थापित करने के लिए, इन चरणों का पालन करें:

  1. अगर यह पहले से ही वहां नहीं है, तो अपनी INSTALLED_APPS सेटिंग में 'django.contrib.sites' जोड़कर sites framework स्थापित करें।

    यह भी सुनिश्चित करें कि आपने सेटिंग फ़ाइल का प्रतिनिधित्व करने वाली साइट की आईडी में SITE_ID को सही ढंग से सेट किया है। यह आमतौर पर 1 (यानी SITE_ID = 1 , लेकिन यदि आप कई साइटों का प्रबंधन करने के लिए साइटों के ढांचे का उपयोग कर रहे हैं, तो यह एक अलग साइट की आईडी हो सकती है।

  2. अपनी INSTALLED_APPS सेटिंग में 'django.contrib.flatpages' जोड़ें।

तो कोई:

  1. अपने URLconf में एक प्रविष्टि जोड़ें। उदाहरण के लिए:

    urlpatterns = [
        path('pages/', include('django.contrib.flatpages.urls')),
    ]
    

या:

  1. अपने MIDDLEWARE सेटिंग में 'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware' जोड़ें।
  2. कमांड manage.py migrate चलाएं।

यह काम किस प्रकार करता है

manage.py migrate आपके डेटाबेस में दो तालिकाएँ बनाता है: django_flatpage और django_flatpage_sitesdjango_flatpage एक साधारण लुकअप टेबल है जो URL को केवल शीर्षक और टेक्स्ट सामग्री के गुच्छा के साथ मैप करता है। django_flatpage_sites एक साइट के साथ एक फ्लैट पृष्ठ को जोड़ता है।

URLconf का उपयोग करना

आपके URLconf में समतल पृष्ठों को शामिल करने के कई तरीके हैं। आप फ्लैट पृष्ठों के लिए एक विशेष पथ समर्पित कर सकते हैं:

urlpatterns = [
    path('pages/', include('django.contrib.flatpages.urls')),
]

आप इसे "कैटचेल" पैटर्न के रूप में भी सेट कर सकते हैं। इस मामले में, अन्य urlpatterns के अंत में पैटर्न रखना महत्वपूर्ण है:

from django.contrib.flatpages import views

# Your other patterns here
urlpatterns += [
    path('<path:url>', views.flatpage),
]

चेतावनी

यदि आप APPEND_SLASH को False सेट APPEND_SLASH , तो आपको कैटचेल पैटर्न में स्लैश को हटा देना चाहिए या बिना अनुगामी स्लैश के फ्लैटपेज़ का मिलान नहीं किया जाएगा।

एक अन्य आम सेटअप फ्लैट पृष्ठों का उपयोग सीमित पृष्ठों के सीमित सेट और यूआरएल को हार्ड कोड करने के लिए है, इसलिए आप उन्हें url टेम्पलेट टैग के साथ संदर्भित कर सकते हैं:

from django.contrib.flatpages import views

urlpatterns += [
    path('about-us/', views.flatpage, {'url': '/about-us/'}, name='about'),
    path('license/', views.flatpage, {'url': '/license/'}, name='license'),
]

मिडलवेयर का उपयोग करना

FlatpageFallbackMiddleware सभी काम कर सकता है।

class FlatpageFallbackMiddleware

जब भी कोई Django एप्लिकेशन 404 त्रुटि उठाता है, तो यह मिडलवेयर अंतिम उपाय के रूप में अनुरोधित URL के लिए फ़्लैटपेज डेटाबेस की जाँच करता है। विशेष रूप से, यह साइट आईडी के साथ दिए गए URL के साथ एक फ्लैटपेज की जांच करता है जो SITE_ID सेटिंग से मेल खाता है।

यदि यह एक मिलान पाता है, तो यह इस एल्गोरिथ्म का अनुसरण करता है:

  • यदि फ़्लैटपेज में कस्टम टेम्प्लेट है, तो यह उस टेम्प्लेट को लोड करता है। अन्यथा, यह टेम्प्लेट flatpages/default.html . flatpages/default.html लोड करता है।
  • यह उस टेम्प्लेट को एकल संदर्भ चर, flatpage , जो फ़्लैटपेज ऑब्जेक्ट है, पास करता है। यह टेम्पलेट को प्रस्तुत करने में RequestContext का उपयोग करता है।

मिडिलवेयर केवल एक अनुगामी स्लैश और रीडायरेक्ट ( APPEND_SLASH सेटिंग को APPEND_SLASH ) APPEND_SLASH यदि परिणामी URL एक वैध फ़्लैटपेज को संदर्भित करता है। पुनर्निर्देश स्थायी (301 स्थिति कोड) हैं।

यदि यह मेल नहीं खाता है, तो अनुरोध हमेशा की तरह संसाधित होना जारी है।

मिडिलवेयर केवल 404s के लिए सक्रिय हो जाता है - 500s या किसी अन्य स्थिति कोड की प्रतिक्रियाओं के लिए नहीं।

फ़्लैटपेज दृश्य मिडिलवेयर लागू नहीं करेंगे

क्योंकि FlatpageFallbackMiddleware URL रिज़ॉल्यूशन के विफल होने और 404 के उत्पादन के बाद ही लागू किया जाता है, यह जो प्रतिक्रिया देता है वह किसी भी दृश्य मिडलवेयर विधियों को लागू नहीं करेगा। केवल अनुरोध जो सामान्य URL रिज़ॉल्यूशन के माध्यम से दृश्य में सफलतापूर्वक रूट किए जाते हैं, दृश्य मिडलवेयर लागू होते हैं।

ध्यान दें कि MIDDLEWARE का क्रम मायने रखता है। आम तौर पर, आप सूची के अंत में FlatpageFallbackMiddleware डाल सकते हैं। इसका मतलब यह है कि यह प्रतिक्रिया को संसाधित करते समय सबसे पहले चलेगा, और यह सुनिश्चित करता है कि किसी अन्य प्रतिक्रिया-प्रसंस्करण मिडिलवेयर को 404 के बजाय वास्तविक फ्लैटपेज प्रतिक्रिया दिखाई दे।

मिडलवेयर पर अधिक के लिए, मिडलवेयर डॉक्स पढ़ें।

सुनिश्चित करें कि आपका 404 टेम्पलेट काम करता है

ध्यान दें कि FlatpageFallbackMiddleware केवल एक बार किसी अन्य दृश्य में सफलतापूर्वक 404 प्रतिक्रिया उत्पन्न करने के लिए कदम FlatpageFallbackMiddleware । यदि कोई अन्य दृश्य या मिडिलवेयर वर्ग 404 का उत्पादन करने का प्रयास करता है, लेकिन इसके बजाय एक अपवाद को समाप्त करता है, तो प्रतिक्रिया एक HTTP 500 ("आंतरिक सर्वर त्रुटि") हो जाएगी और FlatpageFallbackMiddleware एक फ्लैट पृष्ठ की सेवा करने का प्रयास नहीं करेगा।

फ़्लैटपेज को कैसे जोड़ें, बदलें और हटाएं

व्यवस्थापक इंटरफ़ेस के माध्यम से

यदि आपने स्वचालित Django व्यवस्थापक इंटरफ़ेस सक्रिय किया है, तो आपको व्यवस्थापक सूचकांक पृष्ठ पर एक "फ़्लैटपेज" अनुभाग देखना चाहिए। सिस्टम में किसी अन्य ऑब्जेक्ट को संपादित करने के साथ ही फ़्लैटपेज को संपादित करें।

FlatPage मॉडल में एक FlatPage फ़ील्ड है जिसका उपयोग contrib.flatpages द्वारा नहीं किया जाता है, लेकिन यह आपके प्रोजेक्ट या तृतीय-पक्ष एप्लिकेशन के लिए उपयोगी हो सकता है। यह व्यवस्थापक इंटरफ़ेस में प्रकट नहीं होता है, लेकिन आप इसे ModelAdmin लिए एक कस्टम ModelAdmin पंजीकृत करके जोड़ सकते हैं:

from django.contrib import admin
from django.contrib.flatpages.admin import FlatPageAdmin
from django.contrib.flatpages.models import FlatPage
from django.utils.translation import gettext_lazy as _

# Define a new FlatPageAdmin
class FlatPageAdmin(FlatPageAdmin):
    fieldsets = (
        (None, {'fields': ('url', 'title', 'content', 'sites')}),
        (_('Advanced options'), {
            'classes': ('collapse',),
            'fields': (
                'enable_comments',
                'registration_required',
                'template_name',
            ),
        }),
    )

# Re-register FlatPageAdmin
admin.site.unregister(FlatPage)
admin.site.register(FlatPage, FlatPageAdmin)

पायथन एपीआई के माध्यम से

class FlatPage

फ़्लैटपेज का प्रतिनिधित्व एक मानक Django मॉडल द्वारा किया जाता है, जो django/contrib/flatpages/models.py में रहता है। आप Django डेटाबेस एपीआई के माध्यम से फ्लैटपेज ऑब्जेक्ट्स तक पहुंच सकते हैं।

डुप्लिकेट फ़्लैटपेज URL की जाँच करें।

यदि आप अपने स्वयं के कोड के माध्यम से फ़्लैटपेज जोड़ते हैं या संशोधित करते हैं, तो आप संभवतः उसी साइट के भीतर डुप्लिकेट फ़्लैटपेज URL की जाँच करना चाहेंगे। व्यवस्थापक में उपयोग किया जाने वाला फ़्लैटपेज फॉर्म इस सत्यापन की जाँच करता है, और इसे django.contrib.flatpages.forms.FlatpageForm से आयात किया जा सकता है और अपने स्वयं के विचारों में उपयोग किया जा सकता है।

फ़्लैटपेज टेम्प्लेट

डिफ़ॉल्ट रूप से, फ़्लैटपेजों को टेम्प्लेट flatpages/default.html डिफ़ॉल्‍ट.html के द्वारा प्रदान किया जाता है, लेकिन आप किसी विशेष फ़्लैटपेज के लिए इसे ओवरराइड कर सकते हैं: व्यवस्थापक में, "उन्नत विकल्प" (क्लिक करने पर इसका विस्तार होगा) शीर्षक वाला फ़ील्ड समाप्‍त होता है जिसमें टेम्‍पलेट निर्दिष्ट करने के लिए कोई फ़ील्ड होती है नाम। यदि आप Python API के माध्यम से एक फ्लैट पेज बना रहे हैं, तो आप केवल टेम्पलेट नाम को FlatPage ऑब्जेक्ट पर फ़ील्ड template_name name के रूप में सेट कर सकते हैं।

flatpages/default.html टेम्पलेट बनाना आपकी ज़िम्मेदारी है; अपने टेम्प्लेट डायरेक्टरी में, बस एक flatpages डायरेक्टरी बनाएँ जिसमें एक फ़ाइल default.html

फ़्लैटपेज टेम्प्लेट एकल संदर्भ चर, flatpage पारित किए जाते हैं, जो फ़्लैटपेज ऑब्जेक्ट है।

यहाँ एक नमूना flatpages/default.html टेम्पलेट है:

<!DOCTYPE html>
<html>
<head>
<title>{{ flatpage.title }}</title>
</head>
<body>
{{ flatpage.content }}
</body>
</html>

चूंकि आप एक फ्लैट पृष्ठ के लिए व्यवस्थापक पृष्ठ में पहले से ही कच्चे एचटीएमएल में प्रवेश कर रहे हैं, दोनों flatpage.title और flatpage.content flatpage.title दोनों को चिह्नित किया गया है ताकि टेम्पलेट में स्वचालित एचटीएमएल से बचने की आवश्यकता हो

अपने टेम्पलेट्स में फ्लैटपेज ऑब्जेक्ट्स की एक सूची प्राप्त करना

फ़्लैटपेज ऐप एक टेम्प्लेट टैग प्रदान करता है जो आपको वर्तमान साइट पर उपलब्ध सभी फ़्लैटपेजों पर पुनरावृति करने की अनुमति देता है।

सभी कस्टम टेम्प्लेट टैग की तरह, आपको इसका उपयोग करने से पहले इसकी कस्टम टैग लाइब्रेरी को लोड करना होगा। लाइब्रेरी को लोड करने के बाद, आप get_flatpages टैग के माध्यम से सभी वर्तमान फ़्लैटपेज पुनः प्राप्त कर सकते हैं:

{% load flatpages %}
{% get_flatpages as flatpages %}
<ul>
    {% for page in flatpages %}
        <li><a href="{{ page.url }}">{{ page.title }}</a></li>
    {% endfor %}
</ul>

पंजीकरण_प्रमाणित फ़्लैटपेज प्रदर्शित करना

डिफ़ॉल्ट रूप से, get_flatpages टेम्प्लेट टैग में केवल ऐसे फ्लैटपेज़ दिखाई देंगे जो registration_required = False लिए चिह्नित किए गए हैं registration_required = False । यदि आप पंजीकरण-संरक्षित फ़्लैटपेज प्रदर्शित करना चाहते हैं, तो आपको क्लॉज़ के लिए एक प्रमाणित उपयोगकर्ता को निर्दिष्ट करना होगा।

उदाहरण के लिए:

{% get_flatpages for someuser as about_pages %}

यदि आप एक अनाम उपयोगकर्ता प्रदान करते हैं, तो get_flatpages उसी तरह का व्यवहार करेंगे जैसे कि आपने एक उपयोगकर्ता प्रदान नहीं किया था - यानी, यह केवल आपको सार्वजनिक फ़्लैटपेज दिखाएगा।

आधार URL द्वारा फ़्लैटपेजों को सीमित करना

एक वैकल्पिक तर्क, starts_with , एक विशेष आधार URL के साथ शुरुआत करने वालों को लौटे पृष्ठों को सीमित करने के लिए लागू किया जा सकता है। इस तर्क को एक स्ट्रिंग के रूप में या संदर्भ से हल किए जाने वाले चर के रूप में पारित किया जा सकता है।

उदाहरण के लिए:

{% get_flatpages '/about/' as about_pages %}
{% get_flatpages about_prefix as about_pages %}
{% get_flatpages '/about/' for someuser as about_pages %}

Django.contrib.sitemaps के साथ एकीकरण

class FlatPageSitemap [source]

flatpages क्लास सभी सार्वजनिक रूप से दिखाई देने वाले flatpages को वर्तमान SITE_ID ( sites documentation देखें) के लिए परिभाषित करता है और साइटमैप में एक प्रविष्टि बनाता है। इन प्रविष्टियों में केवल location विशेषता शामिल है - अंतिम नहीं, changefreq या priority

उदाहरण

यहां FlatPageSitemap का उपयोग करके sitemaps.FlatPageSitemap का एक उदाहरण sitemaps.FlatPageSitemap :

from django.contrib.flatpages.sitemaps import FlatPageSitemap
from django.contrib.sitemaps.views import sitemap
from django.urls import path

urlpatterns = [
    # ...

    # the sitemap
    path('sitemap.xml', sitemap,
        {'sitemaps': {'flatpages': FlatPageSitemap}},
        name='django.contrib.sitemaps.views.sitemap'),
]