나는 Cake 배경에서 왔습니다. 이제 방금 장고를 배우기 시작했습니다. 나는 그것을 아주 좋아하지만, 케이크와 같은 컨벤션에 비해 컨벤션을 사용하기를 바랍니다. 따라서장고에 더 많은 CoC 추가하기
어떻게 케이크 스타일 URL을 자동으로 가져올 수 있습니까? 예를 들어, 내가
mysite.com/posts/view/5
에 갔다면mysite.posts.views.view
을로드하고 그것에5
이라는 인수를 전달할 것입니까? 나는 urls.py에(r'^(.*)/(.*)', 'mysite.$1.$2'),
과 같은 것을 추가 할 수 있다고 생각하고 있었다. 그러나 물론 작동하지 않을 것이다.어떻게 템플릿을 자동으로로드 할 수 있습니까? 각 뷰 함수는
templates/posts/view.html
과 같은 템플릿을 자동으로로드해야합니다.
이렇게해도 될까요, 아니면 장고의 핵심을 해킹해야합니까?
여기에 무엇을 제안 Carl에 따라 내 솔루션입니다 :
urlpatterns = patterns('',
# url pats here
url(r'^(?P<app>\w+)/(?P<view>\w+)/(?P<args>.*)$', 'urls.dispatch')
)
def dispatch(req, app, view, args): # FIXME: ignores decorators on view func!
func = get_callable(app+'.views.'+view)
if args:
ret = func(req, *args.split('/'))
else:
ret = func(req)
if type(ret) is dict:
return render_to_response(app+'/'+view+'.html', ret)
else:
return ret
초기 테스트를 꽤 잘 작동하는 것 같다. 단일 기능으로 두 가지 문제를 해결합니다. 아마도 GET 스타일의 인수를 지원하지 않을 것입니다.
디렉토리 이름을 가져올 수 있습니까? 데코레이터를 사용해야한다는 것은 다소 불행한 일입니다. 내가 누를 수있는 "후크"가 없습니까? Cake는 필터를 사용하기 전이나 후에 사용할 수 있습니다. 아니면 기본 컨트롤러를 덮어 쓸 수 있습니다 ... – mpen
그래, __file__과 os.path.dirname을 사용하여 디렉토리 이름을 얻을 수는 있지만 그보다 못 생기거나 더 부서지기 쉽습니다. 내가 준 옵션 중 하나. 그리고 데코레이터에 대해 불행한 점은 무엇입니까? 파이썬을 사용할 수있을 때 장고에 마법의 고리를 제공 할 이유는 없습니다. –
각 기능에 뭔가를 추가해야하므로 쉽게 잊어 버릴 수있어 불행합니다. 나는 모든 뷰 기능에 자동으로 적용될 수있는 것을 원했다. – mpen