2010-11-17 52 views
1

我想知道,这将有可能实现(作为应用/中间件):重用django的可重复使用的应用程序

我安装django的登记应用程序。然后,我创建了我的基于网站的应用程序,以制作一些通用的网页浏览量我想在首页上放置登录表单和注册表单。所以我进去修改/register/login.html和register/register.html模板以适应我的首页设计(html东西)。然后我去我的主页index.html文件,我去我的HTML我想要那些块(登录&注册)去,我添加了{%load“register/login.html”%}和一个{%load“register/register.html”%}。现在,当urlconf调用我的索引视图时,模板将到达LOAD触发器,并将调用LOGIN视图,以便将其所有form.elements传递给它,并为其元素调用REGISTER视图。然后,那些完成(呈现)视图被传递给我的index.html并插入到放置LOAD语句的位置。

目前可以做到上述情况吗?我的目标是让各种应用程序可用,并将它们插入到我的项目中,而无需触摸任何代码(我想确保稍后可以升级各个应用程序,并且不会因为我添加自定义内容而破坏项目中的任何内容......) 。

如果目前有上述可能,有人可以提供一些文档/教程/ howtos重新使用其他人的应用程序的最佳做法?

+0

Django根本不擅长可重用性,使用第三方应用程序的定制,主要是通过分支和维护源代码的独立分支来完成。我最好建议你看看金字塔web框架如何处理应用程序的可扩展性http://docs.pylonshq.com/pyramid/dev/narr/extending.html – andreypopp 2010-11-17 10:33:40

+0

@andreypopp这是一个非常有趣的观点。但是,首先,您是否考虑过抱怨那些第三方应用程序,而不是Django? – 2010-11-17 12:25:27

回答

0

确实有{% include %}标记,它允许您将模板直接包含在另一个模板中。它还获取封闭模板获取的所有内容,因此如果使用RequestContext,则意味着它可以访问请求变量中的所有内容。

但是,它似乎是说你想以某种方式实际调用注册视图和登录视图并将结果嵌入到页面中。这在理论上可以通过编写一个自定义标签来实现,该标签使用http GET调用URL,然后从请求中输出生成的HTML。

我不会推荐这个。相反,对于首页,请继续创建两个指向django注册应用程序中适当URL的表单。

0

如何简单地修改应用程序中的视图我重新使用包含一个额外的参数,以查看它是否被用作SUBVIEW(因此不会返回render_to_response()),并检查“FORMNAME”中的请求.POST数据。然后,如果SUBVIEW(我正在重新使用的应用程序的视图)在request.POST中找到它的“FORMNAME”,它将处理该表单。如果没有提供request.POST数据,它将返回一个包含所有表单元素而不是render_to_response()的字典。然后,我可以在我的视图中为该页面调用该函数,并将返回的值字典与其他任何组件一起传递给我的模板。在提交时,函数将被调用,并且如果它在request.POST数据中找到“表单名称”(这个“表单名称”可以在隐藏字段中,它将处理该表单,否则它将返回字典中的表单元素,下一个函数将在我的视图中调用,它可能与django.contrib.django-registration.register()视图有关,这会产生极端的重用性!还可以访问到form.errors!

我的观点:

def index(request): 
    login = django.contrib.register.login(request, ... , Subview=True) 
    register = django.contrib.register.register(request, ... , Subview=True) 

    return render_to_response('index.html', {'login_form': login, 'register_form': register}) 

我也可以叉每个应用程序,并修改它...它失败的目的Ø将该应用程序作为独立维护的软件包重新使用,而将其视为更复杂的代码粘贴。

相关问题