2012-10-16 12 views
15

Jestem nowy w django, a jedną z rzeczy, które wciąż się uczę, są url_patterns. Skonfigurowałem aplikację stron do obsługi ścieżki głównej (http://www.mysite.com), a także niektórych stron statycznych, takich jak strona o. Wyjaśniłem, jak skonfigurować wzorzec adresu URL dla ścieżki głównej, ale nie mogę nakłonić witryny do skierowania ścieżki "/ about" na strony "o" widoku.W Django, jak piszesz wzorzec url dla "/" i innych adresów URL opartych na rootach

Tu jest mój główny urls.py

from django.conf.urls import patterns, include, url 
from django.conf import settings 
urlpatterns = patterns('', 
    url(r'^polls/', include('polls.urls')), 
    url(r'^$', 'pages.views.root'), 
    url(r'^/', include('pages.urls')), 
) 

tutaj jest moje strony urls.py

from django.conf.urls import patterns, include, url 
urlpatterns = patterns('pages.views', 
     url(r'^about', 'about'), 
) 

Oto moje strony views.py

# Create your views here. 
from django.shortcuts import render_to_response 
from django.template import RequestContext 
from django.http import HttpResponse, HttpResponseRedirect 
from django.core.urlresolvers import reverse 

def root(request): 
    return render_to_response('pages/root.html',context_instance=RequestContext(request)) 
def about(request): 
    return render_to_response('pages/about.html',context_instance=RequestContext(request)) 

Gdybym zmienić główny plik urls.py, aby mieć r'^a/', include('pages.urls'), wtedy ścieżka "/ a/about" kieruje do akcji o ... więc myślę, że to musi być problem sposób w jaki piszę wzór adresu URL w tym pliku. Ale nie mogę wymyślić, jak to zmienić. Czy ktoś może pomóc?

+0

do osób biorących udział w głosowaniu, aby zamknąć to pytanie, czy mogłabyś być bardziej konstruktywne i komentarz do daj mi znać jakie wytyczne nie są spełnione i/lub jak mogę je edytować, aby lepiej spełnić te wymagania? – jay

Odpowiedz

25

Dowiedz się, co to jest problem. Prawidłowe url_pattern na poziomie projektu wynosi:

urlpatterns = patterns('', 
    url(r'^polls/', include('polls.urls')), 
    url(r'^$', 'pages.views.root'), 
    url(r'', include('pages.urls')), 
) 

Kiedy to w miejscu „/ o” i inne proste ścieżki kierować prawidłowo.

Dziękuję wszystkim!

+0

Chciałbym dodać dla każdego, kto go przegapił: 'pages' to aplikacja w projekcie OP, a nie specyficzna dla Django. Mogły to być "other_pages" lub coś podobnego. –

5

Spróbuj tego, na url.py na poziomie projektu:

urlpatterns = patterns('', 
# Examples: 
url(r'^$', 'apps_name.views.home', name='home'), 

# Uncomment the admin/doc line below to enable admin documentation: 
# url(r'^admin/doc/', include('django.contrib.admindocs.urls')), 

# Uncomment the next line to enable the admin: 
url(r'^admin/', include(admin.site.urls)), 

(r'^about/', include('about.urls')), 
) 

a potem url.py dla aplikacji o

urlpatterns = patterns('', 
    url(r'^$', direct_to_template, {"template": "about/about.html"}, name="about"), 
) 

Weź pod uwagę, że wyrażenie regularne są oceniane od góry do dołu, a następnie, jeśli ścieżka pasuje do wyrażeń regularnych, zostanie wprowadzona. Aby dowiedzieć się więcej o regexp google it lub wypróbować świetną książkę Zed Shaw o regexps

1

pamiętać, że od Django wersji 2.0 wzorzec URL zmieniła używać django.urls.path() Sprawdź przykład tutaj: link

from django.urls import path 

from . import views 

urlpatterns = [ 
    # ex: /polls/ 
    path('', views.index, name='index'), 
    # ex: /polls/5/ 
    path('<int:question_id>/', views.detail, name='detail'), 
    # ex: /polls/5/results/ 
    path('<int:question_id>/results/', views.results, name='results'), 
    # ex: /polls/5/vote/ 
    path('<int:question_id>/vote/', views.vote, name='vote'), 
] 
Powiązane problemy