2010-11-23 6 views
9

J'utilise le Django 1.3 alpha pour créer un projet avec deux applications. J'utilise 1.3 en raison des vues basées sur les classes. Pour ces deux applications, j'ai un ensemble de classes de vues de base communes, qui sont héritées par les vues réelles dans les applications. Dans la classe de base, existe-t-il un moyen de savoir de quelle application la vue est appelée? Par exemple. puis-je utiliser l'URL pour obtenir l'application "actuelle"?Comment obtenir l'application actuelle dans Django

Répondre

7

Si vous héritez de la liste générique et des vues de détail qui django vous pouvez accéder FOURNIT self.model pour accéder au modèle que la vue affiche des informations sur, sinon vous aurez probablement utiliser django's resolve(): resolve(self.request.path).

Vous pouvez aussi faire votre propre View sous-classe que vous appelez avec un mot-clé de votre choix:

# views.py 
from django.views.generic.base import View 
class MyView(View): 
    app_name = None 

# urls.py 
from django.conf.urls.defaults import * 
from some_app.views import MyView 

urlpatterns = patterns('', 
    (r'^myview/', MyView.as_view(app_name='app_name')), 
) 

alors vous devriez être en mesure d'y accéder par self.app_name.

+1

Je ne savais pas que l'objet renvoyé par resolve() contenait un attribut app_name. J'ai modifié mon fichier url-config du projet principal pour utiliser l'argument app_name dans les appels d'inclusion, y compris les url-configs spécifiques à l'application, puis en utilisant resolve() pour obtenir l'app_name à partir de là. Merci! –

+0

J'ai essayé ceci, mais la variable app_name retourne toujours 'None'. Aucun conseil? –

+0

Comment essayez-vous d'accéder à la variable? –

Questions connexes