在Django中,如何最好地管理移动和桌面网站?

5 投票
6 回答
2151 浏览
提问于 2025-04-15 20:07

我希望网站在正常情况下都能正常运行,但在手机上时,整个网站会使用一套特定的模板。

另外,我想要自动检测用户是不是在用手机。如果是的话,就在整个网站上都使用那套模板。

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 这个头信息来判断应该使用哪一套模板。同时,也允许用户手动选择想要使用哪个网站的模板,这个选择会保存在会话中。

撰写回答