首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何处理同一站点的两个版本

如何处理同一站点的两个版本
EN

Stack Overflow用户
提问于 2011-12-16 20:58:15
回答 3查看 146关注 0票数 3

我的项目由同一件事的两个版本组成。例如,第1版是新生,第2版是二年级。为了避免冗余,我使用相同的模板和视图,因为两个版本中的实现并没有太大的不同。这个站点唯一的不同之处就是urls。以致于

代码语言:javascript
复制
localhost:8000/freshman/computer-science
localhost:8000/sophomore/computer-science

我的网站的用户可以切换到任何版本的网站,只需点击一个按钮,即新生或大二。我对如何实现这样一种方法感到困惑,通过这种方法,我不会重复自己,并且能够以节奏式的方式实现功能。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-16 21:10:01

使用django框架可以通过许多方法来实现此功能。我现在可以建议的一种方法是使用django会话

会话的完整文档可用这里

您可以在会话中保留一个变量,让它称为类型。当用户单击新生时,在后一种情况下,类型将是'f‘或's’。所以

代码语言:javascript
复制
request.session[ 'type' ] = 'f' #when Freshman is clicked
request.session[ 'type' ] = 's' #when Freshman is clicked

要获取站点使用的类型,只需简单地

代码语言:javascript
复制
request.session.get( 'type', '' ) #this would return 'f' || 's' || ''

当用户没有点击这两个选项中的任何一个时,“”就会出现这种情况。

虽然这是一个非常简单和适用的方式,但老实说,我并不是一个使用会话的狂热者,因此,我渴望看到更多的方法被列出。

票数 0
EN

Stack Overflow用户

发布于 2011-12-16 21:14:07

我建议在这两种情况下都使用一个url模式,但将唯一的参数传递给每个用户。您可以使用django.con.urls.defaults.include函数来实现这一点。在本例中,第一个包含将kwarg current_app设置为freshman,第二个设置为sophomore

代码语言:javascript
复制
from django.conf.urls.defaults import *

site_patterns = patterns('',
    # put your urls here...
)

urlpatterns = patterns('',
    url(r'^freshman/',
        include(site_patterns, namespace='freshman', app_name='freshman'), {
            'current_app': 'freshman',
        }),
    url(r'^sophomore',
        include(site_patterns, namespace='sophomore', app_name='sophomore'), {
            'current_app': 'sophomore',
        }),
)

然后,像往常一样,您可以在视图中弹出kwarg,并触发该值的唯一行为:

代码语言:javascript
复制
def my_view(request, *args, **kwargs):
    current_app = kwargs.pop('current_app')

或者,您可以创建一个装饰器来自动化这个和任何其他需要对遵循这种格式的视图进行处理的样板。

票数 2
EN

Stack Overflow用户

发布于 2011-12-16 21:54:27

如果您的意思是代码和数据库模式是相同的,但没有共享数据,那么我建议您将应用程序的两个完整、独立的实例部署到一个服务器(或多个服务器),并让您的two服务器将/sophomore请求路由到一个应用程序,并将/freshman路由到另一个应用程序。有一个单独的开发/测试设置,并使用版本控制将代码更改推送到这两个安装。

通过上述设置,您可以拥有两个单独的数据库,也可以共享一个数据库,并将内容放入您的配置中,以告诉应用程序如何消除其读写内容的歧义。第二种方法比较棘手。

第三种方法是为第二种方法做您要做的事情,除了部署一个应用程序实例,而不是检查配置以确定应用程序是在二年级还是大一模式下运行,您的所有urls都有一个参数作为它们的第一个元素,并且在每个视图中您都会检查该参数的值(或者,django可能有一个钩子来预处理每个请求,您可以在其中执行必要的操作)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8540052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档