2010-09-21 20 views
32

Me he golpeado la cabeza con esto durante las últimas horas. No puedo {{}} MEDIA_URL a aparecerDjango {{MEDIA_URL}} en blanco @DEPRECATED

en settings.py

.. 
MEDIA_URL = 'http://10.10.0.106/ame/' 
.. 
TEMPLATE_CONTEXT_PROCESSORS = (
    "django.contrib.auth.context_processors.auth", 
    "django.core.context_processors.media", 
) 
.. 

en mi opinión tengo

from django.shortcuts import render_to_response, get_object_or_404 
from ame.Question.models import Question 

def latest(request): 
    Question_latest_ten = Question.objects.all().order_by('pub_date')[:10] 
    p = get_object_or_404(Question_latest_ten) 
    return render_to_response('Question/latest.html', {'latest': p}) 

entonces tengo una pregunta base.html y/latest.html

{% extends 'base.html' %} 
<img class="hl" src="{{ MEDIA_URL }}/images/avatar.jpg" /></a> 

pero MEDIA_URL aparece en blanco, pensé que esto es como su supone que debe funcionar, pero tal vez Estoy equivocado.

Actualización La última versión corrige estos problemas.

Respuesta

22

Adición de procesador de contexto de la plantilla medios de comunicación también hace el trabajo

TEMPLATE_CONTEXT_PROCESSORS = (
    "django.core.context_processors.request", 
    "django.contrib.auth.context_processors.auth", 
    "django.core.context_processors.media", 
    "django.core.context_processors.static", 
) 
+1

Ya era cuando era como 1.2 o 1.3. Tu método es el correcto ahora. También en aquel entonces, la separación entre STATIC y MEDIA tampoco estaba clara. – Atherion

+1

Esta debería ser la respuesta aceptada.Funciona como un encanto en Django 1.8. – Leistungsabfall

+0

Sí, gracias. Me he estado arrancando los pelos tratando de obtener una imagen para mostrar sobre ajax ... –

30

Debe agregar RequestContext en su render_to_response para procesar los procesadores de contexto.

En su caso:

from django.template.context import RequestContext 

context = {'latest': p} 
render_to_response('Question/latest.html', 
        context_instance=RequestContext(request, context)) 

Desde el docs:

context_instance

La instancia de contexto para hacer que la plantilla con. Por por defecto, la plantilla se representará con una instancia de Contexto (llenada con valores del diccionario). Si necesita para usar procesadores de contexto, represente la plantilla con una instancia RequestContext en su lugar.

+4

Awww gracias, creo que necesitan señalarlo mejor para las personas que comienzan django. MEDIA_URL es bastante importante para el diseño y la portabilidad. – Atherion

2

También puede utilizar direct_to_template:

from django.views.generic.simple import direct_to_template 
... 
return direct_to_template(request, 'Question/latest.html', {'latest': p}) 
+0

Esto hará lo mismo que 'render_to_response ('Question/latest.html', context_instance = RequestContext (request, context))'? –

2

Además se trate, siempre por encima sugerimos que a echar un vistazo a photologue aplicación. Podría ayudarte a evitar los enlaces directos en los archivos de plantilla y usar objetos en su lugar. F.ex .:

<img src="{{ artist.photo.get_face_photo_url }}" alt="{{ artist.photo.title }}"/> 
Cuestiones relacionadas