Django의 작업에 대한 기본 매개 변수
-
04-07-2019 - |
문제
Regex가 Django를 사용하여 어떤 일이 일치하지 않은 경우에 기본 매개 변수를 동작으로 전달할 수있는 방법이 있습니까?
urlpatterns = patterns('',(r'^test/(?P<name>.*)?$','myview.displayName'))
#myview.py
def displayName(request,name):
# write name to response or something
URLPatterns의 세 번째 매개 변수를 ''사전에 포함시키고 이름 매개 변수에 메소드의 기본값을 제공했지만 그 중 어느 것도 작동하지 않았습니다. 이름 매개 변수는 항상없는 것 같습니다. 기본값을 설정할 수 있다면 실제로 수표를 코딩하고 싶지 않습니다.
설명 : 다음은 내가 변경 한 내용의 예입니다.
def displayName(request,name='Steve'):
return HttpResponse(name)
#i also tried
urlpatterns = patterns('',
(r'^test/(?P<name>.*)?$',
'myview.displayName',
dict(name='Test')
)
)
내 브라우저를 뷰에서 가리키면 'None'텍스트가 표시됩니다.
어떤 아이디어?
해결책
문제는 패턴이 'test/'와 일치 할 때 REGEX가 캡처 한 GroupDict에 '이름'=> 없음을 포함한다는 것입니다.
>>> url.match("test/").groupdict()
{'name': None}
이것은보기가 호출 될 때, 내가 기대하는 것을 사용하여 다음과 유사하다는 것을 의미합니다.
view(request, *groups, **groupdict)
다음과 같습니다.
view(request, name = None)
'test/'의 경우, 이름은 할당되지 않은 것이 아니라 아무도 할당되지 않습니다.
이것은 당신에게 두 가지 옵션을 남깁니다. 당신은 할 수 있습니다 :
- 뷰 코드에서 어떤 종류의 해킹이 아닌지 명시 적으로 확인하십시오.
- URL 디스패치 규칙을 다시 작성하여 이름을 캡처하고 이름이 제공되지 않을 때 캡처 할 두 번째 규칙을 도입하십시오.
예를 들어:
urlpatterns = patterns('',
(r'^test/(?P<name>.+)$','myview.displayName'), # note the '+' instead of the '*'
(r'^test/$','myview.displayName'),
)
두 번째 접근 방식을 수행 할 때 캡처 패턴없이 메소드를 호출하고 Python이 기본 매개 변수를 처리하거나 다른 뷰를 호출 할 수 있습니다.
다른 팁
나 생각 당신은 할 수 있습니다 def displayName(request, name=defaultObj)
; 그것이 제가 과거에 한 일입니다. 기본값을 무엇으로 설정 했습니까?
제휴하지 않습니다 StackOverflow