2011-10-15 10 views
9

के साथ स्थैतिक फ़ाइलों का उपयोग कैसे करें मैं Google ऐप इंजन के लिए Django nonrel प्रोजेक्ट का उपयोग करने का प्रयास कर रहा हूं। मैंने परीक्षण परियोजना को here वर्णित किया है। मैंने अपनी स्थिर फाइलों के लिए "स्थैतिक" नामक परियोजना में एक नया फ़ोल्डर जोड़ा। और app.yaml फ़ाइल के लिए मैंने लाइनें जोड़ दीं;django nonrel

- url: /static 
static_dir: static 

मैं अपनी स्थिर फाइलों तक नहीं पहुंच सकता। क्या मुझे अतिरिक्त विन्यास करना है?

अग्रिम में Thx।

+0

क्या आप किसी भी मौके पर अपने टेम्पलेट्स डाल रहे हैं? –

उत्तर

10

app.yaml Django के साथ कुछ लेना देना नहीं है, लेकिन यह ऐप इंजन फ्रंट-एंड को कॉन्फ़िगर करता है। जवाब इस बात पर निर्भर करता है कि क्या आप डीजेगो या फ्रंट एंड (जो, अच्छी तरह से, सस्ता और तेज़) के साथ स्थैतिक फाइलों की सेवा करना चाहते हैं।

तुम सिर्फ "जोड़ा" तो अंत करने के लिए अपने - url: /static मानचित्रण, ले जाने के लिए यह से पहले /.* वाइल्डकार्ड। चूंकि सभी मैपिंग ऊपर से नीचे तक संसाधित होते हैं - पहले मेलिंग मैपिंग जीतता है।

4

ठीक है, मैंने अभी इसे समझ लिया है। Main.py से पहले static_dir लाइन का उपयोग करें। तो app.yaml इस तरह दिखना चाहिए;

application: test 
version: 1 
runtime: python 
api_version: 1 

builtins: 
- remote_api: on 

inbound_services: 
- warmup 

handlers: 
- url: /_ah/queue/deferred 
    script: djangoappengine/deferred/handler.py 
    login: admin 

- url: /_ah/stats/.* 
    script: djangoappengine/appstats/ui.py 

- url: /media/admin 
    static_dir: django/contrib/admin/media 
    expiration: '0' 

- url: /static 
    static_dir: static 

- url: /.* 
    script: djangoappengine/main/main.py 
13

के रूप में लोगों को पहले ही बताया है, तो आप /.* पैटर्न से पहले अपने static_dir निर्देश रखना चाहिए

हालांकि, कि केवल एक चीज आपको जानकारी होनी चाहिए नहीं है।

इस निर्देश को app.yaml में डालकर, आप ऐपइंजिन वेबसर्वर (चाहे वह विकास या उत्पादन सर्वर) पथ /static को संभालते हैं, और आपको स्थैतिक निर्देशिका के अंदर होने वाली सभी स्थिर फ़ाइलों की आवश्यकता होती है। इसका मतलब है आप python manage.py collectstatic हर बार अपना स्थिर फाइलों में कुछ भी बदल (खासकर यदि आप स्थिर फाइलों के साथ/उपयोग क्षुधा है - कहते हैं, जैसे, admin या django-tinymce) को चलाने के लिए होगा सिर्फ स्थानीय सर्वर पर इन परिवर्तनों का परीक्षण करने के

तो उससे कैसे बचें? डिफ़ॉल्ट रूप से staticfiles डेवलपर सर्वर पर इन फ़ाइलों को हर समय संग्रहित किए बिना विकास सर्वर पर सेवा प्रदान करने में सहायता प्रदान करता है, समस्या पिछले पैराग्राफ में वर्णित भयानक नाम संघर्ष है: Django आपके स्थैतिक फ़ाइलों के पथ के अनुरोधों को पकड़ नहीं सकता है, क्योंकि वे ऐप्स सर्वर द्वारा प्रबंधित किए जाते हैं। आप विकास और उत्पादन सर्वर पर अलग अलग रास्तों का उपयोग करके इसे हल कर सकते हैं:

# in settings.py 
if DEBUG: 
    STATIC_URL = '/devstatic/' 
else: 
    STATIC_URL = '/static/' 

(djangoappengine विकास सर्वर पर सही पर डीबग सेट)। आप ADMIN_MEDIA_PREFIX = '/static/admin/' छोड़ सकते हैं, लेकिन व्यवस्थापक

उपयोग करने से पहले कम से कम एक बार collectstatic चलाने के लिए याद बेशक की /static/path/to.css

ओह बजाय टेम्पलेट्स में {{ STATIC_URL }}path/to.css उपयोग करने के लिए याद है, और मुझे लगता है कि आप मूल स्थिर फ़ाइलों के लिए निर्देशिका भेद आप उस पर काम करें और निर्देशिका जहां स्थिर फाइलें एकत्र की जानी चाहिए। मैं अपने settings.py में इस का उपयोग करें:

STATIC_ROOT = os.path.join(os.path.dirname(__file__), 'sitestatic') 
STATICFILES_DIRS = (
    os.path.join(os.path.dirname(__file__), 'static'), 
) 

इसका मतलब यह है: आप static निर्देशिका में अपने स्थिर fiels डाल (और अपने ऐप्स के static dirs में), collectstatic उन्हें sitestatic dir में एकत्र करता है।उचित app.yaml निर्देश

- url: /static 
    static_dir: sitestatic 

अंत में आप app.yaml कॉन्फ़िगर जब, अपने अनुप्रयोग को अपलोड करने के बाद से सभी स्थिर फ़ाइलों में एकत्र किया जाएगा और sitestatic से प्रदान किए जाते static और media निर्देशिका की अनदेखी करने के सकता है। हालांकि, आपको इसे अपलोड करते समय ही सेट करना चाहिए (अन्यथा ये फ़ाइलें डीबग सर्वर में उपलब्ध नहीं होंगी)

+0

आपको staticfiles सहायक urlpatterns को जोड़ने की आवश्यकता हो सकती है, और RequestContext के बिना प्रस्तुत टेम्पलेट्स के लिए 'स्थैतिक' templatetag को नियोजित करने की आवश्यकता हो सकती है - [docs] (https://docs.djangoproject.com/en/dev/howto/static- फ़ाइलें /)। साथ ही, सुनिश्चित करें कि staticfiles dev helper द्वारा दी गई स्थिर फ़ाइलों के पथ app.yaml में किसी static_dir या static_files प्रविष्टियों से मेल नहीं खाते हैं। जीएई 'स्थैतिक' और 'स्क्रिप्ट' फ़ाइलों को अलग करता है, और देव एप्ससेवर Django को गतिशील रूप से उन फ़ाइलों की सेवा करने से रोक देगा जो सोचते हैं कि स्थिर हैं - उत्पादन के अनुरूप होने के लिए, जहां इसे सुरक्षा कारणों से अवरुद्ध किया गया है। (जीएई एसडीके 1.7.5) – jgiles

+1

urls.py https://docs.djangoproject.com/en/dev/howto/static-files/#serving-static-files- में स्थिर सहायक फ़ंक्शन सेट करना न भूलें। विकास में – taelimoh

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^