根据Django文档,提供移动和桌面应用程序的最佳做法如下:
views.py
from django.contrib.sites.models import Site
def my_view(request):
current_site = Site.objects.get_current()
if current_site.domain == 'foo.com':
# Render desktop home page
elif current_site.domain == 'm.foo.com':
# Render mobile home page
不幸的是,这意味着我将在我编写的每个视图中进行if / then选择。我可以改为做以下事情:
views.py
from django.contrib.sites.models import Site
current_site = Site.objects.get_current()
if current_site.domain == 'foo.com':
def my_view(request):
# Render desktop home page
elif current_site.domain == 'm.foo.com':
def my_view(request):
# Render mobile home page
在我开始浏览我的views.py之前,我想先了解一下这种可能性,试图用这种方式进行测试。
答案 0 :(得分:2)
您是否看过这个应用:http://pypi.python.org/pypi/django-mobility?
使用中间件检测设备和装饰器根据传入设备切换模板是避免冗余if / else结构的好方法。
如果你看看为django-mobility提供的例子,它们看起来与你想要的结构非常相似:
def view(request):
...
@mobilized(view)
def view(request):
...
答案 1 :(得分:1)
您可以使用中间件检测请求是否属于“m”子域,然后指定正确的URL conf以指导您查看所需的视图。我一直在使用django-subdomains
应用程序的修改版本,它一直很好用。如果您的移动网站的视图逻辑与常规网站的视图逻辑完全不同,则这是一种有效且简单的解决方案。这是链接:
https://github.com/tkaemming/django-subdomains
然后您要做的就是为您的移动网站写一个新的网址,在您的设置中指定,然后为您的移动网站编写您的观看/模板,就像您对常规应用一样。