2013-08-01 6 views
27

पर दृश्य के साथ static index.html की सेवा करता है मेरे पास मेरा index.html/static/फ़ोल्डर है। मेरे Django अनुप्रयोग ठीक चल रहा है जब मैं कोशिश:Django '/' url

http://127.0.0.1:8000/index.html 

लेकिन मैं यूआरएल द्वारा index.html acces हैं:

http://127.0.0.1:8000/ 

मैं एक दृश्य में लिखा था और यह काम करता है:

class IndexView(TemplateView): 
    template_name = 'index.html' 

मैंने urls.py में भी जोड़ा (यह मुझे http://127.0.0.1:8000/css/style.css जैसे स्थिर सेवा प्रदान करता है):

url(r'^(?P<path>.*)$', 'django.contrib.staticfiles.views.serve', { 
      'document_root': settings.STATIC_ROOT, 'show_indexes':True 
     }), 

लेकिन मुझे लगता है कि टेम्पलेट व्यू के बिना जो कुछ भी मैं चाहता हूं उसे करने का एक तरीका है।

कोई सुझाव? धन्यवाद। मेरे Django संस्करण है: Django 1,5

संपादित:

कारण मैं स्थिर में index.html रखा: मैं Phonegap संगत Django अनुप्रयोग बनाने के लिए तो उचित कोडिंग के बाद, सभी मुझे क्या करना है चाहता हूँ, है ->स्थिर फ़ोल्डर से .zip बनाएं और इसे मोबाइल ऐप के रूप में फोनगैप पर अपलोड करें। आसान और साफ

+0

क्यों भूल जाते हैं न आप टेम्पलेट व्यू चाहते हैं? यह इस कारण से है। –

+0

मैंने सोचा कि बिना किसी दृश्य के सेवा करने का कोई तरीका है। – Feanor

+3

(https://docs.djangoproject.com/en/dev/ref/contrib/flatpages/) तो [flatpage एप्लिकेशन] का प्रयोग करें। –

उत्तर

37

आप इस तरह के विकास के लिए static/index.html सेवा कर सकते हैं:

if settings.DEBUG: 
    urlpatterns += url(
     r'^$', 'django.contrib.staticfiles.views.serve', kwargs={ 
      'path': 'index.html', 'document_root': settings.STATIC_ROOT}), 

लेकिन उत्पादन के लिए आप अपने nginx (या अन्य दृश्यपटल सर्वर) कॉन्फ़िगर करना चाहिए / स्थान

अद्यतन के लिए index.html फ़ाइल की सेवा के लिए

मैं इस मामले को समझाना चाहता हूं कि आपको ऐसा करना चाहिए। उदाहरण के लिए आपका django ऐप केवल व्यवस्थापक और एपीआई दृश्य है, लेकिन क्लाइंट एक पेज ऐप (एम्बर, कोणीय, जो कुछ भी) के साथ इंटरैक्ट करता है। तो आपके पास प्रोजेक्ट में कम से कम दो सबप्रोजेक्ट हैं, एक आपके मुख्य django ऐप के साथ और दूसरा क्लाइंट ऐप है जिसमें सभी एचटीएमएल/जेएस/सीएसएस सामान हैं। क्लाइंट स्क्रिप्ट्स को डीजेंगो बैकएंड से अलग करना बहुत सुविधाजनक है, यह आपके फ्रंटेंड डेवलपर्स को अपना काम करने और डीजेंगो अस्तित्व से बचने की अनुमति देता है (किसी दिन इसे अलग रेपो में स्थानांतरित किया जा सकता है)।

  1. भागो क्लाइंट ऐप के सूत्रों का कहना है अपनी स्क्रिप्ट/शैलियों/टेम्पलेट्स (brunch watch, grunt नौकरी या gulp घड़ी कार्य)
  2. के साथ स्थिर इकट्ठा के पुनर्निर्माण के लिए द्रष्टा:

    तो इस मामले में आप निम्नलिखित निर्माण कार्यप्रवाह मिल Django उत्पादन के लिए

  3. सुनिश्चित करें कि आप urlpatterns विकास और उत्पादन के लिए सही nginx config के लिए तय किया हुआ है

यहाँ मेरी urls.py उदाहरण है

urlpatterns += patterns(
    'django.contrib.staticfiles.views', 
    url(r'^(?:index.html)?$', 'serve', kwargs={'path': 'index.html'}), 
    url(r'^(?P<path>(?:js|css|img)/.*)$', 'serve'), 
) 
+0

इसके लिए धन्यवाद। आप एचटीएमएल 5 इतिहास एपीआई से कैसे निपटते हैं और एक src फ़ोल्डर से सेवा करते हैं? मैं अपने कोणीय ऐप्स का निर्माण करता हूं ताकि वे देव के दौरान src से सेवा कर सकें। मैंने पैटर्न में संशोधन किया ताकि index.html को सभी यूआरएल पैटर्न को पकड़कर पकड़ा जा सके और इसे संपत्ति के पैटर्न के समक्ष रखा जा सके। काम करने लगता है। लेकिन मैं टेम्पलेट्स/src से जेएस/सीएसएस/आईएमजी की सेवा करना चाहता हूं। डॉक्टर को बदलने की कोशिश की। जड़ लेकिन यह काम नहीं करता है (जवाब argh में कोड पेस्ट नहीं कर सकता) – Howie

+0

@ होवी यह ओपन सोर्स प्रोजेक्ट है? क्या आप मुझे दिखा सकते हैं कि आपके पास क्या है? –

+0

हाय @ एंटन। देर से प्रतिक्रिया व्यक्त करने के लिए क्षमा करें। मैंने ऊपर आपकी सिफारिश का उपयोग करने के लिए गिथब पर बॉयलरप्लेट बनाया है। शायद आप एक संकेत प्रदान कर सकते हैं? एसपीए Django के बाहर काम करता है, लेकिन Django https://github.com/howieweiner/django-angular-boilerplate के माध्यम से परोसा जाता है। Thnx – Howie

32

इस मामले में आपको TemplateView उपclass करने की आवश्यकता नहीं है। आप अपने यूआरएल conf में सीधे TemplateView का उपयोग कर सकते हैं, जब तक index.html आपकी टेम्पलेट निर्देशिका में है।

from django.views.generic.base import TemplateView 

urlpatterns = [ 
    url(r'^$', TemplateView.as_view(template_name='index.html'), name="home"), 
] 
+0

हम्म। पहले से बेहतर लगता है – Feanor

+0

तो टेम्पलेट रेंडरर के माध्यम से इसे पास किए बिना स्थिर HTML फ़ाइल को प्रस्तुत करने का कोई तरीका नहीं है? –

+3

[ 'views.serve'] (https://docs.djangoproject.com/en/1.6/ref/contrib/staticfiles/#django.contrib.staticfiles.views.serve) सहायक विकास के लिए केवल इरादा है। उत्पादन में स्थैतिक फाइलों की सेवा के लिए आपको Django का उपयोग नहीं करना चाहिए। अपने वेब सर्वर का प्रयोग करें उदा। स्थिर फ़ाइलों की सेवा के लिए अपाचे या Nginx। – Alasdair

0

कैसे this answer में / पर index.html की सेवा (या एक blog post रूप में विस्तारित) के मेरे लंबे स्पष्टीकरण चेक बाहर। अकेले वह समाधान पर्याप्त नहीं हो सकता है, हालांकि, यदि आप Django द्वारा सेवा प्राप्त एक पूर्ण एसपीए चाहते हैं (क्योंकि आपको फ्रंटेंड रूटिंग की आवश्यकता है)।

मैं / को /static/ मार्ग, दृश्यपटल के लिए सभी अनुरोधों को अग्रेषित करने, index.html फ़ाइलें खोजने के लिए विभिन्न तरीकों के साथ खेल रहा है। अंत में मैं हल करने के लिए यह सब urls.py अदल-बदल करके नहीं था सबसे अच्छा तरीका मिल गया, लेकिन whitenoise का ही विस्तार है कि मैं (स्थापना के निर्देश README में) django-spa के रूप में जारी है।

आप इस WhiteNoise issue में संबंधित चर्चा के कुछ पा सकते हैं।

0

आप, टेम्पलेट्स निर्देशिका बनाने वहाँ एचटीएमएल रखा और फिर से views.py

def index(request): 
     return render(request, 'my_app/index.html', context={}) 

यह प्रदान कर सकते हैं settings.py में templates_dir स्थापित करने के लिए नहीं

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 
TEMPLATES_DIR = os.path.join(BASE_DIR, "templates") 

TEMPLATES = [ 
{ 
    'BACKEND': 'django.template.backends.django.DjangoTemplates', 
    'DIRS': [TEMPLATES_DIR,], 
    'APP_DIRS': True, 
    ...