增加更多的CoC Django
-
16-09-2019 - |
题
我来自一个 蛋糕 背景下,我刚刚开始了解决。我喜欢这一点,但我有点希望它用《公约》的通过构成像蛋糕一样。所以,
我怎么能得到蛋糕式网址自动?例如,如果我去了
mysite.com/posts/view/5
它将负荷了mysite.posts.views.view
并通过一个参数5
给它吗?我想我可以添加的东西喜欢(r'^(.*)/(.*)', 'mysite.$1.$2'),
要urls.py但当然,这不会的工作。我怎么可以自动加载了一个模板?每个视功能应自动负载一个模板,喜欢
templates/posts/view.html
.
这是可能的,或者是要我破解的核心Django?
这是我方案的基础上什么 卡尔 建议:
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
似乎是工作很好用初步测试。解决这两个问题与一个单一的功能。可能不会得到支持风格的参数寿。
解决方案
这些要点均可实施没有黑客Django的核心,但是任何一个,将需要一个不平凡的水平熟悉先进的蟒蛇的技术。
你可以做的URL通用模式与模式是这样的:
url(r'^(?P<appname>\w+)/(?P<viewfunc>\w+)/(?P<args>.*)$', 'myresolverfunc')
然后定义'myresolverfunc'"看法"功能,以"名称","viewfunc",并且"参数"的参数,以及实现任何逻辑你想要的,分裂args on"/"和动态的进口和分派到任何图功能是引用。最棘手的部分是动态的进口,可以搜寻它的来源为"从"看到的动态进口都是内部完成各种地方。
该模板的自动加载程序可以实现为视功能的装饰类似的各个 "render_to"装饰 在那里,除了你会生成模板的名称,而不是通过它的装饰。你必须检查功能的目的,获得它的名字。让的应用程序的名字将是更加棘手;你可能只是想硬编码它作为一个模块级全球每views.py 文件或其他工作结合上述网址调度员,并有注释的请求对象的应用程序的名称或一些这样的。
其他提示
我不只需破解的核心的决于此。这听起来像你可能会需要的 一般意见.还检查了 一般意见的主题指南.
第一个例子中给出的一般意见的文件听起来像是你的第一点:
例如:
鉴于以下网址模式:
urlpatterns = patterns('django.views.generic.simple', (r'^foo/$', 'direct_to_template', {'template':'foo_index.html'}), (r'^foo/(?P<id>\d+)/$', 'direct_to_template', {'template':'foo_detail.html'}), )
...一个请求/foo/会呈现的模板foo_index.html和一个请求/foo/15/想呈现foo_detail.html 与背景变量{{参数。id}}这是设置15个。