Django : 미디어 / 스타일 시트를 제공하고 템플릿 내에서 그들과 연결하는 방법

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

문제

이 질문의 변형이 요청되었지만 템플릿이 렌더링 될 때 스타일이 올바르게로드 될 수는 없습니다.

개발 중 Django 프로세스에서 정적 미디어를 제공하려고 노력하고 있습니다. 생산에서 강력하게 낙담하고 있습니다. 구성과 템플릿을 게시하겠습니다. 누군가가 내가 어디에서 잘못 될지 이해하도록 도와 줄 수 있기를 바랍니다.

Django Project 웹 사이트의 예제를 따르려고했지만 템플릿에서 스타일 시트를 참조하는 방법을 언급하지 않습니다. 나는 또한 같은 것들의 다양한 변형을 시도 했으므로 내 코드/설정이 설명 된 내용에서 약간 벗어날 수 있습니다.

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>

파일 (템플릿/미디어)이 내 파일 시스템의 올바른 디렉토리에 있습니다. 제공해야 할 추가 정보가 있으면 의견을 게시하십시오.


편집하다:

내가 가진 문제 중 하나는 '/'링크를 사용하는 것입니다. 정방향 슬래시가 배정되면 사이트의 루트에서 링크가 열립니다. 전방 슬래시가 없으면 링크가 현재 레벨에서 열립니다. An example:

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"

다른 팁

Django는 이미 Media_URL에 대한 컨텍스트 프로세스가 있습니다. 장고의 문서.

RequestContext에서 Context_Processors를 사용자 정의하고 추가하는 것을 잊지 않는 한 기본적으로 사용 가능해야합니다.

Django가 CSS/JavaScript 파일을 제공하지 않기 때문에 보통 내 자신의 템플릿 간단한 태그를 만듭니다. 아파치는 내 미디어 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.com/en/dev/ref/settings/#admin-media-prefix

둘째, 파일 시스템의 URL 경로와 혼동하는 디렉토리를 혼란스럽게 할 수 있습니다. 절대 URL을 사용한 다음 정제하십시오.

그냥 내가 빨리 차임한다고 생각했다. 여기의 모든 제안은 잘 작동하지만 개발 중에 TY의 예제를 사용하지만 프로덕션을 치면 직선 아파치를 통해 파일을 제공하거나 사용중인 다른 서버를 통해 파일을 제공하기를 원할 수 있습니다.

내가하는 일은 개발을 마치면 하위 도메인을 설정하고 모든 링크를 정적 미디어로 바꾸는 것입니다. 예를 들어:

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

이를 수행하는 이유는 두 가지입니다. 첫째, Django가 필요하지 않은 경우 이러한 요청을 처리하는 것이 느리게 보입니다. 둘째, 대부분의 브라우저는 실제로 3 개의 다른 도메인에서 파일을 동시에 동시에 다운로드 할 수 있으므로 정적 파일에 두 번째 하위 도메인을 사용하면 실제로 사용자의 다운로드 속도 속도가 높아집니다.

추가해야 할 또 다른 사항은 하위 도메인/다른 도메인에 별도의 미디어 서버가있는 경우 정적 미디어의 쿠키를 비활성화 할 수 있다는 것입니다. 약간의 처리와 대역폭을 저장합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top