2012-08-21 3 views
1

특정 object_list에서 "defaultfieldname"이라는 필드를 필터링하는보기가 있습니다. 내가하고 싶은 것은 필드의 이름을 urls.py의 매개 변수로 전달하여 다른 필드에 다른 URL을 사용할 수 있도록하는 것입니다.Django에서 URL에 매개 변수를 추가하는 방법은 무엇입니까?

나는 쉬울 것 어떤 방법 확실하지 않다 :

class MonthCalends(ListView): 
    template_name='month_list.html' 
    ## Sets default fieldname value 
    filter_field = "defaultfieldname" 
    ...rest of code 

urls.py의 PARAM 덮어해야

url(r'^calendar/birthday/$', login_required(MonthCalends.as_view(model=Person)), name='bday_list', filter_field="birthdate"), 
url(r'^calendar/deathday/$', login_required(MonthCalends.as_view(model=Person)), name='dday_list', filter_field="deathdate"), 

또는

url(r'^calendar/birthday/$', login_required(MonthCalends.as_view(model=Person, filter_field="birthdate")), name='bday_list'), 
url(r'^calendar/deathday/$', login_required(MonthCalends.as_view(model=Person, filter_field="deathdate")), name='dday_list'), 

그럼 내가 볼 수 있습니다 보기에서 "defaultfieldname",하지만보기에서 urls.py에서 filter_field를 얻는 방법을 모르겠습니다. 어떤 도움이 필요합니까?

감사합니다. ,

url(r'^calendar/(\w+)$', login_required(MonthCalends.as_view(model=Person)), name='bday_list'), 

그런 다음 당신이 그것을 액세스 할 수 self.args[0]

를 사용하여 그리고 경우에 당신은 filter_field에 대한 두 가지 유형을 허용 :

+0

어떻게'filter_field' 값을 사용할 계획입니까? 예를 들어, 페이지에 인쇄하거나'Person.birthdate' 필드를 가져 와서 인쇄할까요? – qff

답변

2

as_view과 함께 보내는 인수는 MonthCalends 개체에 설정됩니다. 즉, filter_fieldself.filter_field으로 사용할 수 있습니다. 다음과 같이 당신이 할 수있는 get 방법을 정의 가정 :

class MonthCalends(ListView): 
    template_name='month_list.html' 
    ## Sets default fieldname value 
    filter_field = "defaultfieldname" 

    def get(self, request, *args, **kwargs): 
     try: 
      # if the filter field was sent as an argument 
      filter_field = self.filter_field 
     except: 
      # else revert to default 
      filter_field = MonthCalends.filter_field 
     # ...rest of code 

을 좀 더 자세한 설명은하면 Django class based views documentation 확인합니다.

+0

이 get() 함수는 다음과 같은 오류를 제공합니다. 보기 calend.views.MonthCalends가 HttpResponse 객체를 반환하지 않았습니다. 나는 그 리턴 라인을 놓친 것 같아. – StaticX

+1

이 코드는'get' 함수의 나머지 부분을 가지고 있다고 가정하므로 리턴 값이 누락 된 것입니다. 'return super (ListView, self) .get (요청, * args, ** kwargs) ' – qff

+0

완벽한! 나는'반환 super (MonthCalends, self) .get (request, * args, ** kwargs)'로 바 꾸었습니다. – StaticX

1

당신은 단지 하나 개의 URL을 사용할 수 있습니다, 그건 당신의 URL의 두 번째 부분을 트리거 self.args[0]을 읽은 클래스에서 나중에 예외를 발생시킬 수 있습니다. 당신이 self.kwargs['type']를 사용하여 액세스 할 수 있습니다이 경우

r'^calendar/(?P<type>\w+)$' 

:

은 물론, 당신은 같은 정규 표현식에 더 읽기 구문을 사용할 수 있습니다.

어쨌든, 정규식 그룹을 사용하는 것은 훨씬 더 깔끔하게 보입니다.

+0

당신의 대답 Kamyar 주셔서 감사합니다,하지만 그건 내가 원하는 게 아니에요. url 부분은 field_names와 다릅니다. url과 마찬가지로^'calendar/birthday /는 birthDate 필드를 사용합니다. 정규 표현식 그룹이 내 문제를 해결하지 못하도록 완전히 다른 이름의 다른 필드가 있습니다. – StaticX

관련 문제