你可以做的一件事是有两个映射的URL:一个供第三方使用,一个供独立django站点使用。
这两个URL都会映射到相同的django视图,但传递一个不同的参数,指示您希望模板的完整版本用于视图,还是一个没有页眉,页脚和第三方模板的其他部分的受限制的参数没有兴趣
使用模板inheritance或作文(有人会用include tag,但我总是提到它,因为它是一个选项)来创建适当的模板 - 一个包含所有组件的独立模板django网站以及仅有第三方感兴趣的内容;并根据映射网址传入的参数让您的视图使用其中一个或另一个。
因此,第三方会使用类似http://blah.com/thirdparty/abc/12
的网址,其中/thirdparty/abc
是第三方的网址;而您的主Django网站将使用http://blah.com/abc/12
,其中/abc
是独立网站的网址。您可以同时映射到相同视图并使用extra-options将参数传递给视图,以指示要使用的模板。
我认为试图通过确定请求来自哪里来解决问题是一个失败的主张。
希望有所帮助。
PS。你的英语完全可以理解。
编辑:
建议在计算器上使用:如果你希望有人来阐述自己的答案,添加评论,他们的答案。这将使StackOverflow在页面顶部的小电子邮件图标中记下用户应该检查的答案。我只注意到您对该问题的编辑,因为我正在检查我的回复中的拼写错误。 :-)编辑的问题应该澄清问题,当然,但总是认为如果澄清是通用的,或者如果它是一个答案的评论 - 有时你需要做的两个!澄清你的问题,并在回答中添加评论以提醒受访者这一变化。
回到手头上的问题:
你urls.py
应该是这个样子:
from django.conf.urls.defaults import *
urlpatterns = patterns('app.views',
(r'^standalone/(?P<template>\w+)/(\d{4})/$', 'view_callable'),
)
因此,捕获并送至视图可调用的参数之一(即我想象力称为view_callable)是“模板”,指示要使用的模板。
现在你有两个选择:
一)建立使用继承两个模板 - 这样一个没有页眉/页脚,第二个,从第一个继承,添加必要的额外的方向 - 有观点决定哪些模板要根据urls.py
的模板参数进行渲染。通过这种机制,每个模板都知道在其构建的URL中添加适当的模板类型。因此,包含标题的模板将构建将“完整”或“inapp”指示器作为“模板”参数传递给urls.py
的网址。
b)使用合成构建一个模板 - 因此模板有条件地包含页眉和页脚,具体取决于从视图传入的参数,然后决定根据来自urls.py
的模板参数设置参数。通过这种机制,模板通过查看视图设置的参数知道在其构建的URL中添加适当的模板类型。
a)的优点是,您可以为独立模板和第三方模板构建完全不同的外观。另外,如果您打算使用两个模板,则可以在每个视图的两个网址中打破urls.py
;像:
from django.conf.urls.defaults import *
urlpatterns = patterns('app.views',
(r'^standalone/standalone/(\d{4})/$', 'view_callable', {'template':'complete'}),
(r'^standalone/thirdparty/(\d{4})/$', 'view_callable', {'template':'thirdparty'}),
)
这将使你做的意见reverse()来电或模板url调用和动态建立联系。
b)的优点是你只有一个模板来维护。没有更新一个而忘记另一个的风险。
要回答你的第二子问题,我想我需要一个例子来理解你的意思......
记住,可能有其他的方式来做到这一点。这只是我想到的方式。
的感谢!我只需要了解动态链接。 这是我的例子: (r'^/rank/$','foo.views.rank'), (r'^(?P \ w +)/ rank/$','foo.views。排名'), 在我看来,'排名'只有一个模板。 里面,我怎么能改变我的链接使用(或不)前缀'group_name'? 这就好像当用户访问'/ foo/rank /'时,所有链接都可以使用sufix'/ foo /'。 我不能得到如何用{%url%}做到这一点。 –
fabriciols
2010-03-09 19:59:51
好吧,我的解决方案是为所有标签添加一个变量{{SUFIX}} ...并非如此美丽,而是可行! 有没有更好的解决方案呢? – fabriciols 2010-03-10 13:46:19
那么,你不应该在模板中不使用url标记的情况下创建链接。如果您使用url标记,则可以将SUFFIX作为参数传递给方法。阅读更多关于url()的信息:http://docs.djangoproject.com/en/dev/ref/templates/builtins/#ttag-url – cethegeek 2010-03-10 15:29:13