我使用django创建了一个web-app,它在桌面浏览器上非常漂亮,但在移动浏览器中,有些页面看起来并不完美。
我的模板目录为myproject/template/
我想为移动浏览器myproject/template_mobile/
制作新模板,每当网页通过移动设备访问时,它都会重定向到myproject/template_mobile/
模板,否则它会通过myproject/template/
。有没有办法让它形成setting.py
或decorates
?我不想改变整个视图和旧模板。
提前致谢。
答案 0 :(得分:5)
最后我得到了解决方案:
我使用django-mobile进行此操作,根据要求更改settings.py
并为此设置middleware.py
。
settings.py:(first follow `django-mobile`)
DESKTOP_TEMPLATE_DIRS = (os.path.join(PROJECT_ROOT, 'templates'),)
MOBILE_TEMPLATE_DIRS = (os.path.join(PROJECT_ROOT, 'templates/mobile'),)
然后制作middleware.py
middleware.py
from django.conf import settings
class MobileTemplatesMiddleware(object):
"""Determines which set of templates to use for a mobile site"""
def process_request(self, request):
# sets are used here, you can use other logic if you have an older version of Python
MOBILE_SUBDOMAINS = set(['m', 'mobile'])
domain = set(request.META.get('HTTP_HOST', '').split('.'))
if request.flavour=='mobile':
settings.TEMPLATE_DIRS = settings.MOBILE_TEMPLATE_DIRS
else:
settings.TEMPLATE_DIRS = settings.DESKTOP_TEMPLATE_DIRS
答案 1 :(得分:2)
有几种方法可以解决这个问题。首先是找到一种在视图中获取设备信息然后
的方法from django.shortcuts import render
def foo_view(request):
data = Model.objects.all()
my_template = 'template.html'
"""
your logic for device_info
"""
if device_info == 'mobile'
my_template='mobile_template.html'
return render(request, my_template, {'data': data})
其他方式是使用django-responsive,在这种情况下,您可以在基本模板中包含device_info,因此在这种情况下您可以拥有:
{% if device_info.type == 'phone' %}
{% include 'templates/mobile_template.html' %}
{% else %}
{% include 'templates/template.html' %}
{% endif %}
第三种方法是重写你的html / css代码并使用一些响应式CSS框架,如Foundation或Twitter Bootstrap
希望有所帮助