جانغو:كيف يمكنك أن تخدم وسائل الإعلام / الأنماط وصلة لهم داخل قوالب

StackOverflow https://stackoverflow.com/questions/446026

سؤال

الاختلافات من هذا السؤال تم طلب, ولكن أنا لا تزال غير قادرة على الحصول على الأنماط لتحميل بشكل صحيح عند القوالب يتم تقديمها.

أنا في محاولة لخدمة ساكنة وسائل الإعلام من جانغو خلال عملية التنمية - الذي هو بقوة في الإنتاج ، أنا على علم.أنا ما والتكوين قالب بلدي ، نأمل شخص ما يمكن أن تساعدني على فهم أين أنا ذاهب خاطئ.

علما بأنني حاولت أن تحذو حذو على جانغو موقع المشروع ، ومع ذلك لم يذكر كيفية الرجوع إلى صفحات الأنماط الخاصة بك من قالب.كما حاولت العديد من أشكال مختلفة من نفس الشيء ، رمز/الإعدادات قد يكون قليلا من ما وصفت.

settings.py

MEDIA_ROOT = 'D:/Dev Tools/django_projects/dso/media'
MEDIA_URL = '/media/'
ADMIN_MEDIA_PREFIX = '/media/'

urls.py

from django.conf.urls.defaults import *
from django.conf import settings
from django.contrib import admin

admin.autodiscover()

urlpatterns = patterns('',
    (r'^admin/(.*)', admin.site.root),
    (r'^ovramt/$', 'dso.ovramt.views.index'),
)

if settings.DEBUG:
    urlpatterns += patterns('',
        (r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),
    )

ضمن قالب بلدي:

<head> 
<title> {% block title %} DSO Template {% endblock %} </title> 
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
<link rel="stylesheet" type="text/css" href="../media/styles.css">
</head>

أؤكد لك الملفات (templates/الإعلام) في الدليل الصحيح على نظام الملفات.إذا كان هناك أي معلومات إضافية أحتاج إلى توفير, الرجاء نشر التعليق.


تحرير:

واحدة من المشاكل التي كنت أعاني كان استخدام '/' يتبع بلدي الروابط.إذا مائل إلى الأمام هو إرفاق مسبقا, يتم فتح الرابط من جذر الموقع.إذا كان هناك أي مائل إلى الأمام ، فتح الرابط في المستوى الحالي.على سبيل المثال:

www.example.com/application/ رابط "/app2/ رابط "app3/".
app2 في فتح www.example.com/app2/ و app3 في فتح www.example.com/application/app3/.هذا كان مربكا لي أن أعتقد.

هل كانت مفيدة؟

المحلول

وأود فقط أن هذا الرقم نفسي.

وsettings.py:

MEDIA_ROOT = 'C:/Server/Projects/project_name/static/'
MEDIA_URL = '/static/'
ADMIN_MEDIA_PREFIX = '/media/'

وurls.py:

from django.conf import settings
...
if settings.DEBUG:
    urlpatterns += patterns('',
        (r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),
    )

وملف قالب:

<link rel="stylesheet" type="text/css" href="/static/css/style.css" />

ومع الملف الموجود هنا:

"C:/Server/Projects/project_name/static/css/style.css"

نصائح أخرى

وجانغو لديها بالفعل عملية سياق MEDIA_URL، انظر> وأ href = "http://docs.djangoproject.com/en/dev/ref/templates/api/#django-core-context-processors-media" يختلط = "noreferrer" عنوان = "في الوثائق جانغو ل"> جانغو الوثائق .

يجب availbale في بشكل افتراضي (إلا إذا كنت قد مخصصة CONTEXT_PROCESSORS ونسيت أن أضيف عليه) في RequestContext.

أنا عادة ما جعل بلدي قالب بسيط الوسم لأن جانغو ليس إعطاء CSS/جافا سكريبت الملفات.أباتشي يفعل ذلك الإعلام url عادة http://static.mysite.com.

yourApp/templatetags/media_url.py:

from django.template import Library
from yourapp.settings import MEDIA_URL
register = Library()

@register.simple_tag
def media_url():
    return MEDIA_URL

و في ملف القالب:

{% load media_url %}
<link href="{{ media_url }}css/main.css" rel="stylesheet" type="text/css">

يمكن أن تجعل أيضا الخاصة بك السياق المعالج لإضافة media_url متغير في كل قالب.

وأنا مجرد استخدام التسمية المطلقة. إلا إذا كنت تقوم بتشغيل الموقع في مسار عميق (أو حتى لو كنت)، كنت إسقاط .. والذهاب لشيء من هذا القبيل:

<link rel="stylesheet" type="text/css" href="/media/styles.css">

ولقد حصلت على زوجين من الأفكار، وأنا لا أعرف أي واحد منهم هو العمل بالنسبة لي:)

<اقتباس فقرة>   

تأكد من استخدام شرطة مائلة زائدة، وأن يكون هذا يكون مختلفا عن الإعداد MEDIA_URL (منذ URL نفسه لا يمكن تعيين على مجموعتين مختلفتين من الملفات).

وهذا من HTTP: //docs.djangoproject. كوم / EN / ديف / المرجع / إعدادات / # المشرف وسائل الإعلام، بادئة

وثانيا، قد يكون من أنك الدلائل مربكة على الملفات الخاصة بك مع مسارات رابط. حاول استخدام عناوين المواقع المطلقة، ومن ثم صقل عليهم.

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

ما أفعله هو أنني إعداد نطاق فرعي مرة واحدة انتهيت النامية، واستبدال جميع الروابط وسائل الاعلام ثابتة. على سبيل المثال:

<link rel="stylesheet" type="text/css" href="http://static.mydomain.com/css/style.css" />

والأسباب للقيام بذلك هي ذات شقين. أولا، يبدو تماما مثل أنه سيكون أبطأ أن يكون جانغو التعامل مع هذه الطلبات عندما لا حاجة إليها. ثانيا، لأن معظم المتصفحات يمكن في الواقع تحميل الملفات في وقت واحد من 3 مختلف المجالات، وذلك باستخدام الفرعي الثاني المجال لملفات الثابتة الخاصة بك وسوف تسريع فعليا حتى سرعة التحميل من المستخدمين.

وشيء آخر لإضافة هو أنه إذا كان لديك وسائل الاعلام الخادم منفصلة على نطاق فرعي / مجال مختلف، يمكنك تعطيل الكوكيز لوسائل الإعلام ثابت الخاص بك. يوفر القليل من تجهيز وعرض النطاق الترددي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top