2017-04-21 7 views
0

나는 django에 대해 다소 새로운데, 모델없이 백엔드를 작성할 때 django에서 슬러그를 정의 할 위치를 찾고있다. url은 다음과 같이 생성됩니다.Django에서 model.py없이 슬러그를 정의하는 곳

url(r'^main/(?P<slug>[-\w]+)/', include('main.urls')), 

각 뷰 기능 내부에서 정의한 main.urls 내에 슬러그가 있습니다. 이 슬러그를 정의 할 위치가 정확히 무엇인지는 모르겠다. 다른 장고 슬러그 예제에서 일반적인 방법은 모델에 있으며, 현재 내 자신의 모델을 만드는 대신 프로그램에 대해 이야기하고 있습니다.

urls.py 또는 views.py (프로젝트가 아닌 앱)에 있습니까? 정말 고마워요. 바라기를 이것은 이해할 수 있습니다.

+0

'slug'는'views' 클래스의 요청 함수 (get, post와 같은)에 대한 매개 변수 여야합니다. –

+0

이 있으니 각보기에 데코레이터를 두어야합니다 (12 개 정도 있습니다. main.urls)를 정의합니다. 효율적인 방법이 있습니까? – Desario

+1

나는 당신이 슬러그 *를 원한다고 확신하지 못합니다. 슬러그는 db의 특정 레코드를 식별하는 방법이므로 모델을 통해서만 의미가 있습니다. 정확히 무엇을하고 싶습니까? 다른보기로 이동하는 URL을 차별화하는 경우 이는 표준 URL 패턴이며 슬러그가 필요하지 않습니다. –

답변

0

어렵지 않습니다. 정말.

url-configs에서 각 항목은 일반 사용자가 방문한 URL과 일치해야하는 정규 표현식입니다. 당신은 일치하는 데이터를 추출하고보기 함수에 변수로 데이터를 전달하기 위해 정규 표현식 구문의 특별한 종류를 사용할 수 있습니다 http://localhost:8000/main/some-slug/

: 함께 예를 들어 r'^main/(?P<slug>[-\w]+)/'의 뜻이 일치합니다. 그렇게하지

비트는슬러그라는 변수에 (이 경우에 슬러그)합니다 (<slug> 부분은 변수의 이름을 정의) 단어 정합 둔다 (?P<slug>[-\w]+)이다. 이 겸손한 예제에서 슬러그 변수는 "some-slug"로 설정됩니다.

변수는이 같은보기에 액세스 할 수 있습니다 :

from django.http import HttpResponse 

def handle_my_view(request, slug=homepage): 
# do stuff with slug  
return HttpResponse("I did stuff with slug: {}".format(slug)) 

http://www.regexr.com

에서 정규 표현식

에 대한 자세한하고, 바이올린 알아하지만 이유는 굼벵이를 볼 수 있습니까 모델에 사용 되나요? :

슬러그 (또는 이름 붙은 변수, url 'interception'에서 오는 것)은 무엇이든 사용할 수 있습니다. 일반적으로 슬러그 변수 자체는 어떤 종류의 데이터베이스 레코드를 검색하는 데 사용됩니다 ... 그리고 그것은 모델 사용과 관련됩니다.

원하는대로 할 수 있습니다. 물건 추가, 물건 빼기, 대문자로, 무엇이든. 하늘이 한계 다. 장고 문서에서

:

https://docs.djangoproject.com/en/1.10/topics/http/urls/#named-groups

명명 된 그룹

위의 예는 비트를 포착 (괄호 통해) 단일 비라는 정규 표현기를 사용 를 URL에 추가하고 위치 인수로 뷰에 전달합니다. 고급 사용법에서는 명명 된 정규 표현식 그룹을 사용하여 URL 비트를 캡처하고이를 키워드 인수로보기에 전달할 수 있습니다.

파이썬 정규식에서 명명 된 정규 표현식 그룹의 구문은 (?Ppattern). 여기서 name은 그룹의 이름이고 pattern은 일치시킬 패턴입니다.

from django.conf.urls import url 

from . import views 

urlpatterns = [ 
    url(r'^articles/2003/$', views.special_case_2003), 
    url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive), 
    url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive), 
    url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$', views.article_detail), 
] 

이 정확히 이전 예제와 같은 일을 수행 한 미묘한 차이 :

여기라는 이름의 그룹을 사용하기 위해 다시 위의 예 URLconf,의 캡처 값은 키워드 인수 등의 기능을 볼 전달 위치 적 논증보다는 예 :

/articles/2005/03/에 대한 요청은 views.month_archive(request, '2005', '03') 대신 views.month_archive(request, year='2005', month='03') 함수를 호출합니다.

/articles/2003/03/03/에 대한 요청은 views.article_detail(request, year='2003', month='03', day='03')을 호출합니다.

실제로는 URL 환경이 명시 적이며 인수 순서 버그가 적다는 것을 의미하며 뷰의 함수 정의에서 인수의 순서를 바꿀 수 있습니다. 물론 이러한 이점은 간결함을 희생합니다. 일부 개발자는 명명 된 그룹 구문이 추악하고 너무 길다는 것을 알게됩니다.