문제

나는 장고의 모델로 많은 수의 분야와 20000+테이블의 행이 있습니다.을 촉진하는 사람이 읽을 수 있는 Url 을하고 휴식 할 수있는 기능을 아래로 큰으로 목록을 임의 하위가 있는 URL 을 다음과 같습니다:

/browse/<name1>/<value1>/<name2>/<value2>/ .... etc ....

는'이름'지도하는 모델의 특성과 가치'를 검색 기준에 대한 특성입니다.각각의"이름을"처리됩니다 다음과 같 카테고리의 하위 집합을 반환하는 모델의 경우 카테고리 일치합니다.

지금 이룰 수 있을 것으로 얻을 매개 변수이지만,저는 읽을 수 있는 Url 을 모두 사용자의 술과 검색 엔진입니다.이러한 Url 하위 집합이 포함됩 각 페이지에 표시되는 이 모델은,그래서 그것은 보인 가치를 만들기 위해 노력이 꽤 Url.

이상적으로 각각의 이름/값 쌍으로 전달될 보기 기능으로 매개 변수 이름 name1, name2, 니다,등등.그러나 나는 그것을 믿지 않는 가능성을 정의 이름 패턴을 통해 regex 의 일치하는 텍스트입니다.내가 잘못가?

그래서,그것은 내가 해야하는 다음과 같은 것이 가능합니다.

urlpatterns = patterns('',
    url(r'^browse/(?:([\w]+)/([\w]+)/)+$', 'app.views.view', name="model_browse"),
)

그것은 것이 일치해야의 집합 두 가지 이름/값 쌍으로 이루어져 있습니다.는 동안 그것을 일치 그것을 성공적으로,그것은 단지 전달 마지막 이름/값 쌍으로 매개 변수를 보기 기능이다.나의 추측은 각각의 일치하는 덮어쓰기 이전이 일치합니다.에서 추측하는 것을 포함하는(?:...)+ 그것을 일으키는 원인이 되고 있는,나도 간단한 패턴을 반복하는 대신:

urlpatterns = patterns('',
    url(r'^browse/([\w]+/)+$', 'app.views.view', name="model_browse"),
)

...과 동일한 문제이지만,이 시간 *args 만을 포함 마지막으로 일치하는 패턴이 있습니다.

이의 제한 장고의 url 을 발송자 및/또는 파이썬의 정규 표현식을 지원합니까?그것은 보인다 이러한 방법 중 하나 작업해야 합니다.이 있을 달성하는 방법이 없이 하드 코딩이 가능한 각 모델의 특성에 URL 을 선택적으로(.*) 패턴?

도움이 되었습니까?

해결책

가능성을 고려할 수 있습하는 전체 문자열 값에서 url 을 패턴 부분 및 풀의 특정 부분에서 확인할 수 있게 되었습니다.예를 들어:

urlpatterns = patterns('',
    url(r'^browse/(?P<match>.+)/$', 'app.views.view', name='model_browse'),
)

def view(request, match):
    pieces = match.split('/')
    # even indexed pieces are the names, odd are values
    ...

어떠한 약속에 대한 정규 표현식을 사용 했지만,나는 당신이 무슨 뜻인지 이해합니다.

(편집하고 수정 regexp.)

다른 팁

동의함으로 아담,하지만 제가 생각하는 패턴 urls.py 어야 한다:

... r'^browse/(?P<match>.+)/$' ...

는'\w'만과 일치'단어는'문자,그러나'.'과 일치합니다.

같은 대답이 나에게 와서 읽는 동안 문제입니다.

믿 model_browse 보기 최고의 방법으로 정렬하려면 쿼리수로 사용하는 일반 라우터입니다.

나는 생각은 아담의 대답은 좀 더 일반적인보다 나은 솔루션,하지만 당신을 사용하여 고정의 인수를 url 에서,당신은 또한 다음과 같은 것이 가능합니다.

다음 예는 어떻게 얻을 모든 판매의 하루에 위치를 입력해의 이름을 storeyear, monthday.

urls.py:

urlpatterns = patterns('',
    url(r'^baseurl/location/(?P<store>.+)/sales/(?P<year>[0-9][0-9][0-9][0-9])-(?P<month>[0-9][0-9])-(?P<day>[0-9][0-9])/$', views.DailySalesAtLocationListAPIView.as_view(), name='daily-sales-at-location'),
)

Alternativly 사용할 수도 있습의 id 를 저장에 의해 변경 (?P<store>.+) 하기 (?P<store>[0-9]+).Note locationsales 는 키워드로,그들은 단지 가독성을 개선의 url 이 있습니다.

views.py

class DailySalesAtLocationListAPIView(generics.ListAPIView):
    def get(self, request, store, year, month, day):
        # here you can start using the values from the url
        print store
        print year
        print month
        print date

        # now start filtering your model

그것을 희망하는 데 도움이 사람!

Best regards,

마이클

나는 대체 솔루션,지 않는 아주 다른 이전에서 그러나 그것은 더 세련된:

url(r'^my_app/(((list\/)((\w{1,})\/(\w{1,})\/(\w{1,3})\/){1,10})+)$'

이름 url 매개변수 와 반복적인 regexp.하지 않고"유효하지 않은 정규 표현식여러 반복"나는 단어에서 시작 부분의 목록입니다.

나는 아직 작업에서 볼 수신 목록에 있습니다.그러나 나는 생각한 아픈'통 args 또는 kwargs..할 수 없는 여전히 그것을 말하다.

제 2 센트

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top