zh-cn
, zh-hk
, en
请求参数, 区分不同语言版本的请求数据, 对应的三个版本网站后端的渲染逻辑基本相同,这时候就出现了重复的代码(在泥泞的地面上, 挖了一个浅浅的坑)基金信息
, 基金净值展示
, 分红信息
, 公告文件下载
等功能, 后端提供的接口依然靠zh-cn
, zh-hk
, en
来区分三个语言版本, 这时, 后端渲染的逻辑, 重复度特别高, 视图函数单个文件的代码量一度达到3000行(深坑! 由于时间紧, 需求变化频繁, 也没时间重构项目, 复制,粘贴到怀疑人生, 3.0版本是含着泪做完的...)项目完成后, 我迫不及待的进行了项目优化
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^zh-cn/index$', views.zh_cn_index, name="zh_cn_index"),
url(r'^zh-hk/index$', views.zh_hk_index, name="zh_hk_index"),
url(r'^en/index$', views.en_index, name="en_index")
]
as.view()
将Index作为视图处理函数使用, 并传入lang参数):from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^zh-cn/index$', views.Index.as_view(lang = "zh-cn"), name="zh_cn_index"),
url(r'^zh-hk/index$', views.Index.as_view(lang = "zh-hk"), name="zh_hk_index"),
url(r'^en/index$', views.Index.as_view(lang = "en"), name="en_index")
]
from django.shortcuts import render
# 中文版
def zh_cn_index(request):
return render(request, 'pc/cn/index.html', locals())
# 繁体版
def zh_hk_index(request):
return render(request, 'pc/hk/index_hk_amp.html', locals())
# 英文版
def en_index(request):
return render(request, 'pc/en/index_en_amp.html', locals())
from django.shortcuts import render
from django.views.generic import ListView
class Index(ListView):
lang = ""
def get(self, request):
lang = self.lang
if (lang == "zh-cn"):
return render(request, 'pc/cn/index.html', locals())
if (lang == "zh-hk"):
return render(request, 'pc/hk/index_hk.html', locals())
if (lang == "en"):
return render(request, 'pc/en/index_en.html', locals())
django要用类来减少视图函数的重复书写
的观点...