我正在尝试使用django开发移动和PC浏览器的网站。 我试图找出视图和模板的最佳结构。 有我试过的:
1)使用不同的网址(例如http://example.com/mobile/和http://example.com/或 http://example.com/?c=mobile)区分移动设备和个人电脑,并将它们映射到设置不同模板的不同视图。
2)在视图中根据USER_CLIENT设置不同的模板
3)使用视图的包装层,实际视图只是将数据返回给包装器,包装器设置不同的模板。在django中有一种常见的方法可以解决这个问题吗?有什么建议和意见吗?
答案 0 :(得分:1)
将Django的"sites" framework用于http://m.example.com
的移动版。
答案 1 :(得分:1)
我会推荐解决方案3;使用装饰器检查客户端用户代理并在移动代理的情况下返回不同的模板。
装饰器有两个参数:普通模板和移动模板。
从您的视图中,返回一个dict装饰器可以作为上下文传递给渲染函数。有一个名为'render_to'的装饰器,它可以很好地完成这项工作,谷歌就是这样。
要处理用户想要完整版本的用例,即使从移动设备浏览,您也可以使用重定向视图来设置装饰者可能检查的cookie。
答案 2 :(得分:0)
最佳做法:使用minidetector将额外信息添加到请求中,然后使用django的内置请求上下文将其传递给您的模板。
from django.shortcuts import render_to_response
from django.template import RequestContext
def my_view_on_mobile_and_desktop(request)
.....
render_to_response('regular_template.html',
{'my vars to template':vars},
context_instance=RequestContext(request))
然后在您的模板中,您可以介绍以下内容:
<html>
<head>
{% block head %}
<title>blah</title>
{% if request.mobile %}
<link rel="stylesheet" href="{{ MEDIA_URL }}/styles/base-mobile.css">
{% else %}
<link rel="stylesheet" href="{{ MEDIA_URL }}/styles/base-desktop.css">
{% endif %}
</head>
<body>
<div id="navigation">
{% include "_navigation.html" %}
</div>
{% if not request.mobile %}
<div id="sidebar">
<p> sidebar content not fit for mobile </p>
</div>
{% endif %>
<div id="content">
<article>
{% if not request.mobile %}
<aside>
<p> aside content </p>
</aside>
{% endif %}
<p> article content </p>
</aricle>
</div>
</body>
</html>