我来自一个 蛋糕 背景下,我刚刚开始了解决。我喜欢这一点,但我有点希望它用《公约》的通过构成像蛋糕一样。所以,

  1. 我怎么能得到蛋糕式网址自动?例如,如果我去了 mysite.com/posts/view/5 它将负荷了 mysite.posts.views.view 并通过一个参数 5 给它吗?我想我可以添加的东西喜欢 (r'^(.*)/(.*)', 'mysite.$1.$2'), 要urls.py但当然,这不会的工作。

  2. 我怎么可以自动加载了一个模板?每个视功能应自动负载一个模板,喜欢 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个。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top