2017-09-20 2 views
2

Je suis nouveau à Django, j'ai fait plusieurs tutoriels pour être vraiment à l'aise avec la structuration, et je cours maintenant dans le tutoriel officiel.Dans Django 1.11 obtenir des erreurs d'importation circulaire Lors de l'inclusion des fichiers URLconf de l'application dans le projet URLconf Fichier

J'ai créé un polls App, qui a un fichier polls/views.py comme suit:

from django.shortcuts import render 
from django.http import HttpResponse 


# Create your views here. 
def index(request): 
    return HttpResponse("Hello, World. You're at the polls index.") 

J'ai aussi créé un fichier URLconf App polls/urls.py avec le code suivant:

from django.conf.urls import url 

from . import views 

url_patterns = [ 
    url(r'^$', views.index, name='index'), 
] 

Cette est à peu près exactement comme dans le tutoriel Django.

Mon problème est quand je suis en spécifiant les routes url dans le fichier principal projectname/url.py au niveau du projet en tant que tel:

from django.conf.urls import include, url 
from django.contrib import admin 

urlpatterns = [ 
    url(r'^polls/', include('polls.urls')), 
    url(r'^admin/', admin.site.urls), 
] 

Quand vous faites cela, je reçois l'erreur suivante:

django.core.exceptions.ImproperlyConfigured: The included URLconf '<module 'polls.urls' from 'ProjectFolder\\polls\\urls.py'>' does not appear to have any patterns in it. If you see valid patterns in the file then the issue is probably caused by a circular import. 

C'est ainsi que le tutoriel officiel de Django le dicte. Cependant, si j'importer explicity le fichier polls/views.py de l'application, je peux accomplir la tâche comme suit:

from django.conf.urls import url 
from django.contrib import admin 
from polls import views 


urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'^polls/', views.index), 

] 

Ma préoccupation immédiate est l'importation de toutes les applications/fichier urls je crée jamais été rendue nécessaire par cette approche, comme ainsi que la divergence évidente de l'instruction officielle Django.

J'ai hésité à poser cette question, car je pense qu'un problème aussi fondamental devrait avoir une solution facile. Toute aide serait grandement appréciée.

Pour clarifier, je peux contourner l'erreur en important explicitement les fichiers de vue des applications. Chaque fois que j'utilise l'approche décrite dans la documentation de Django pour utiliser la fonction include(), je reçois l'erreur. Je peux apprécier la valeur de cette fonction, et aimerais savoir pourquoi me donne l'erreur décrite ci-dessus.

+0

Le fichier 'polls/views.py' est le premier bloc de code dans ma question. – theeastcoastwest

+0

pouvez-vous essayer de faire '' 'à partir de polls.views import index'''. Je pense qu'il y a un conflit lorsque vous importez des vues dans les deux fichiers. – Bestasttung

+0

Oui, référence le deuxième bloc de code dans ma question. – theeastcoastwest

Répondre

1

Il suffit d'écrire urlpatterns = [ .. et non url_patterns dans votre poll.views.py.

+0

La liste 'url_patterns' est expliquée par la documentation de Django comme appartenant au fichier' poll.urls.py', tout comme elle appartient au fichier 'mainprojectname/urls.py'. Même si vous faites référence aux fichiers 'urls.py', je ne suis toujours pas sûr de ce que vous décrivez. – theeastcoastwest

+0

pouvez-vous me lier ce tutoriel? Du document officiel, je vois: '' 'urlpatterns = [ url (r '^ $', views.index, name = 'index'), ]' '' et non '' '' url_patterns''': https: //docs.djangoproject.com/fr/1.11/intro/tutorial01/#write-your-first-view – Bestasttung

+0

Je dis juste que vous avez mal orthographié le nom de la variable '' '' urlpatterns''' – Bestasttung