在Django中,如何最好地管理移动和桌面网站?
我希望网站在正常情况下都能正常运行,但在手机上时,整个网站会使用一套特定的模板。
另外,我想要自动检测用户是不是在用手机。如果是的话,就在整个网站上都使用那套模板。
6 个回答
1
最佳做法是使用 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>
1
如果你在网页的主体部分加上一个类(Django也有类似的做法,用来指定使用哪种列样式),你就可以使用相同的模板,只需换不同的样式表就行了。我不太清楚你为什么要使用不同的模板,但这样做可能会让你减少多次重新编写模板的工作。
9
有两套模板,一套是给手机用的,另一套是给电脑用的。把这些模板的文件名放在两个字典里,然后通过 User-agent
这个头信息来判断应该使用哪一套模板。同时,也允许用户手动选择想要使用哪个网站的模板,这个选择会保存在会话中。