2011-02-01 11 views
13

django उपयोगकर्ता के किसी अन्य उपयोगकर्ता की तरह मैं स्थिर फाइलों की सेवा करता हूं। मैंने dzango 1.3 के लिए तैयार होने के लिए django-staticfiles का उपयोग करना चुना है जो मूल रूप से इसे into the core एकीकृत करेगा।Django: स्थिर फाइलों में मीडिया संदर्भित सीएसएस (django dev/1.3/स्थिर फाइलें)

मेरा प्रश्न वास्तव में बहुत आसान है - यह कई मीडिया स्रोतों को एक साथ खींचने और django टेम्पलेट्स में एक समान तरीके से संदर्भित करने के लिए बहुत अच्छा काम करता है। हालांकि, मैं अक्सर छवि पृष्ठभूमि Css में इतनी तरह का उपयोग करें:

#itemname { background-image: url('/path/to/image.png'); } 

मेरा प्रश्न सरल है - अगर मैं पूर्ण नाम का उपयोग, मैं मुश्किल कोड उन्हें करना है। यदि मैं सापेक्ष नामों का उपयोग करता हूं, तो "उपनिर्देशिका" यूआरएल पर जाने से इन वस्तुओं के संसाधन संसाधन को गड़बड़ कर दिया जाता है और उन्हें लोड नहीं किया जा सकता है।

तो, मैं इस समाधान को सीएसएस में कैसे बढ़ा सकता हूं? कहा समाधान से बचना चाहिए:

  • एचटीएमएल में सीएसएस एम्बेड। मैं व्यक्तिगत रूप से इससे बचता हूं।
  • हार्डकोडेड यूआरएल का उपयोग करना। यह बहुत अच्छी तरह से काम नहीं करता है क्योंकि मेरे स्थानीय सेटअप पर मैं आमतौर पर परीक्षण के लिए अपाचे के साथ 'लोकलहोस्ट/प्रोजेक्ट' का उपयोग करता हूं (mod_wsgi) जबकि मैं तैनाती के लिए project.com का उपयोग करता हूं।

विचार?

उत्तर

19

आपने कहा कि आपको सापेक्ष पथों में परेशानी है, लेकिन मुझे समझ में नहीं आता कि आपका क्या मतलब है।

मैं एक ही मुद्दे में भाग गया, और मैंने इसे हल करने के लिए सापेक्ष पथ का उपयोग किया है। ध्यान में रखना एकमात्र चीज यह है कि जब छवियों को तैनात करने की आवश्यकता होती है (स्पष्ट रूप से) सीएसएस फ़ाइलों के सापेक्ष एक ही पथ में रहती है।

संक्षेप में मेरे सेटअप:

नोट मैं अभी भी Django 1.2 के साथ Django-StaticFiles उपयोग कर रहा हूँ, लेकिन यह Django 1.3 के लिए इसी तरह काम करना चाहिए

STATIC_URL = "/site_media/static/" 
STATIC_ROOT = os.path.join(PROJECT_ROOT, "site_media", "static") 
STATICFILES_DIRS = (
    os.path.join(PROJECT_ROOT, "static_media"), 
) 

तब मैं की सेवा {{ STATIC_URL }}css/style.css से सीएसएस जो ../images/logo.png पर छवियों का संदर्भ देता है।

और अपने प्रोजेक्ट इस तरह दिखता है:

project_dir 
    ... 
    stuff 
    static_media 
    ... 
    css 
    images 

मुझे बताएं कि आप कोई प्रश्न हैं, और मैं स्पष्ट कर देंगे।

+0

बिट मुझे यकीन नहीं है, अब आपने उत्तर दिया है - सीएसएस फ़ाइल के सापेक्ष सीएसएस 'पृष्ठभूमि-छवि' यूआरएल हैं, या यूआरएल जिस से पेज परोसा जा रहा है?यदि पूर्व, मुझे हल किया गया है, क्योंकि मैं आपके द्वारा उल्लिखित सटीक रूप से उपयोग कर सकता हूं। –

+0

बस इसका परीक्षण किया - सापेक्ष सीएसएस में काम करता है। मैं उससे खुश हूं। एक टिक है! –

+0

@ जॉन, PROJECT_ROOT भी आपके द्वारा परिभाषित किया गया है या यह स्वचालित रूप से Django द्वारा आपके वर्तमान प्रोजेक्ट रूट (जहां आपका manage.py झूठ बोल रहा है) के रूप में परिभाषित किया गया है। यदि आप PROJECT_ROOT को स्वयं परिभाषित करते हैं तो आपको इसे विकास पर्यावरण या उत्पादन वातावरण (निर्देशिका संरचना के रूप में) में अलग-अलग – David

1

ठीक है,

अगर वहाँ कुछ @ जॉन समाधान के साथ गलत है लेकिन यह मेरे लिए तो काम नहीं था कि मैं सीएसएस इस कोड को मैं नहीं जानता कि

{% load static %} 
{% get_static_prefix as STATIC_PREFIX %} 

और

<link rel="stylesheet" href="{{ STATIC_PREFIX }}css/main.css"> 

उम्मीद है कि यह मदद करता है!

+0

इसका मतलब है कि आपके सभी स्टाइलशीड को टेम्पलेट के रूप में पार्स किया जाना चाहिए ... उन्हें कैशिंग करने के बारे में सोचें! – Stefano

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