Django WebApp移动和桌面

时间:2016-01-06 07:32:31

标签: python django mobile django-templates

我使用django创建了一个web-app,它在桌面浏览器上非常漂亮,但在移动浏览器中,有些页面看起来并不完美。 我的模板目录为myproject/template/我想为移动浏览器myproject/template_mobile/制作新模板,每当网页通过移动设备访问时,它都会重定向到myproject/template_mobile/模板,否则它会通过myproject/template/。有没有办法让它形成setting.pydecorates?我不想改变整个视图和旧模板。

提前致谢。

2 个答案:

答案 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

希望有所帮助