2010-05-30 7 views
0

J'ai une variable appelée STATIC_URL, a déclaré dans settings.py dans mon projet de base:django - variables déclarées dans le projet de base ne semble pas dans l'application

STATIC_URL = '/site_media/static/' 

Il est utilisé, par exemple, dans mon site_base. html, qui relie les fichiers CSS comme suit:

<link rel="stylesheet" href="{{ STATIC_URL }}css/site_tabs.css" /> 

J'ai un tas de modèles liés à des applications différentes qui se prolongent site_base.html, et quand je les regarde dans mon navigateur, le CSS est correctement lié comme

<link rel="stylesheet" href="/site_media/static/css/site_tabs.css" /> 

(Ceux-ci sont livrés avec une distribution pinax par défaut.) J'ai créé une nouvelle application appelée 'courses' qui se trouve dans le dossier ...../apps/courses. J'ai une vue pour l'une des pages dans les cours appelés courseinstance.html qui étend site_base.html tout comme les autres.

Cependant, lorsque celui-ci rend dans mon navigateur, il sort comme

<link rel="stylesheet" href="css/site_tabs.css" /> 

comme si STATIC_URL était égal à « » pour cette application. Dois-je faire une sorte de déclaration pour que mon application prenne les mêmes valeurs de variables que le projet? Je n'ai pas de fichier settings.py pour l'application. d'ailleurs, l'application est listée dans ma liste de INSTALLED_APPS et elle est bien servie, juste sans le lien vers le fichier CSS (donc la page semble amusante).

Merci d'avance pour votre aide.

Répondre

2

Les variables dans settings.py ne sont pas disponibles pour les modèles. Ce qui est disponible pour un modèle est déterminé par la vue qui le rend. Lorsque le modèle est rendu, vous transmettez un dictionnaire qui est le «contexte» du modèle. Le contexte est un dictionnaire de noms de variables et de leurs valeurs.

Pour passer une valeur des paramètres sur le modèle, vous devez généralement quelque chose comme ceci:

from django.conf import settings 
def my_view(request): 
    # view logic 
    context = { 
      'STATIC_URL': settings.STATIC_URL, 
      # other template variables here 
    } 
    # render the template and produce a response 

Vos paramètres de STATIC_URL semble être très similaire à la MEDIA_URL setting. MEDIA_URL est disponible pour tous les modèles via un default context processor. Vous pouvez faire quelque chose de similaire par writing your own context processor. Vous pouvez jeter un oeil à how the default context processors are implemented dans la source django pour avoir une idée.

+0

ah, merci. Ajouter context_instance = RequestContext (request) à ma commande render_to_response a fait l'affaire. Ajout de code ci-dessous car il ne rend pas bien comme un commentaire. – unsorted

+0

passant right context_instance = RequestContext (request) to render_to_response assure que tous les processeurs de contexte seront appliqués. –

0
def courseinstance(request, courseinstance_id): 
    p = get_object_or_404(CourseInstance, pk=courseinstance_id) 
    return render_to_response('courses/courseinstance.html', {'courseinstance': p}, 
     context_instance=RequestContext(request)) #added this part to fix problem