2017-02-04 5 views
0

J'ai des problèmes avec mes URL. J'ai une application appelée utilisateurs qui a deux modèles, salon et styliste. L'url/stylists et/salons rend la même vue (stylist_results) mais les salons devraient rendre le salon_results et je n'arrive pas à comprendre pourquoi. Je pense qu'il peut y avoir quelque chose de mal dans la façon dont j'utilise les espaces de noms.Problème avec l'espace de noms. Deux URL différentes donnent la même vue

utilisateurs/urls.py

from django.conf.urls import url 

#import views from the current directory 
from . import views 

urlpatterns=[ 
    url(r'^$', views.stylist_results, name='stylist_results'), 
    url(r'^(?P<pk>\d+)$', views.stylist_detail, name='stylist_detail'), 
    url(r'^$', views.salon_results, name='salon_results'), 
    url(r'^(?P<pk>\d+)$', views.salon_detail, name='salon_detail'), 
] 

utilisateurs/views.py

from django.shortcuts import get_object_or_404, render 

from .models import Salon, Stylist 
# Create your views here. 

def salon_results(request): 
    salons = Salon.objects.all() 
    return render(request, 'salons/salon_results.html', {'salons': salons}) 


def salon_detail(request, pk): 
    salon = get_object_or_404(Salon, pk=pk) 
    return render(request, 'salons/salon_detail.html', {'salon': salon}) 


def stylist_results(request): 
    stylists = Stylist.objects.all() 
    return render(request, 'stylists/stylist_results.html', {'stylists': stylists}) 

def stylist_detail(request, pk): 
    stylist = get_object_or_404(Stylist, pk=pk) 
    return render(request, 'stylists/stylist_detail.html', {'stylist': stylist}) 

urls.py

from django.conf.urls import url 
from django.contrib import admin 
from django.conf.urls import include 
from django.contrib.staticfiles.urls import staticfiles_urlpatterns 

from . import views 

urlpatterns = [ 
    url(r'^salons/', include('users.urls', namespace='salons')), 
    url(r'^stylists/', include('users.urls', namespace='stylists')), 
    url(r'^admin/', admin.site.urls), 
    url(r'^$', views.home, name='home'), 
] 


urlpatterns += staticfiles_urlpatterns() 

views.py

from django.shortcuts import render 


def home(request): 
    return render(request, 'home.html') 
+1

il exécute toujours la première URL correspondante - 'r '^ $', views.stylist_results,'. Créez deux fichiers séparés. – furas

Répondre

1

Divisez votre styliste vues et salon en deux modules séparés. Vous pourriez envisager de créer deux applications différentes, mais vous n'êtes pas obligé de le faire. À l'heure actuelle,

urlpatterns = [ 
    url(r'^salons/', include('users.salon_urls', namespace='salons')), 
    url(r'^stylists/', include('users.stylist_urls', namespace='stylists')), 
    ... 
] 

le:

utilisateurs/de stylist_urls.py

urlpatterns = [ 
    url(r'^$', views.stylist_results, name='stylist_results'), 
    url(r'^(?P<pk>\d+)$', views.stylist_detail, name='stylist_detail'), 
] 

utilisateurs/de salon_urls.py

urlpatterns = [ 
    url(r'^$', views.salon_results, name='salon_results'), 
    url(r'^(?P<pk>\d+)$', views.salon_detail, name='salon_detail'), 
] 

puis mettre à jour votre projet de urls.py avec les nouveaux modules Les expressions rationnelles pour vos URL de salon sont exactement les mêmes que celles des stylistes, ainsi les URL de salon wi ll correspond toujours en premier.

+0

Merci, cela a parfaitement fonctionné. –

0

Qu'est-ce que vous vous attendez à se

Vous incluez des utilisateurs/urls.py à urls.py

Il ne suit:

me trouver/styliste/=> aller dans urls inclus trouver d'abord occurance d'url (r '^ $', views.stylist_results, name = 'stylist_results'),

rend ce point de vue

même chose se produit avec/salons/

URL Dispatcher documentation

1

Vous spécifiez un même ensemble de (url de les users.urls) pour les salons et les stylistes ici:

url(r'^salons/', include('users.urls', namespace='salons')), 
    url(r'^stylists/', include('users.urls', namespace='stylists')),