基于 Django 年/月的帖子存档

2024-04-13

我是 Django 新手并启动了一个应用程序,我做了模型, 视图、模板,但我想在底部添加某种存档 页面的内容,类似这样http://www.flickr.com/photos/ionutgabriel/3990015411/ http://www.flickr.com/photos/ionutgabriel/3990015411/.

所以我想列出所有年份以及当年的所有月份。那个有帖子的人要链接,其他没有。我还想翻译月份名称,因为我需要罗马尼亚语。

到目前为止我所做的是:

在我看来:

def archive(request): 
    arch = Post.objects.dates('date', 'month', order='DESC') 

    archives = {} 
    for i in arch: 
        tp = i.timetuple() 
        year = tp[0] 
        month = tp[1] 
        if year not in archives: 
            archives[year] = [] 
            archives[year].append(month) 
        else: 
            if month not in archives[year]: 
                archives[year].append(month) 
    return render_to_response('blog/arhiva.html', {'archives':archives}) 

在我的模板中:

    {% for years, months in archives.items %} 
                    {{ years }} 
                    {% for month in months %} 
                   <a href="{{ years }}/{{ month }}">{{ month }}</a> 
                    {% endfor %} 
            <br /> 
                {% endfor %} 

这会返回类似:

       2008               10 
       2009               10               9 
       2007               10 

但我根本无法对它们进行排序...按年份或任何内容,而且我也不知道如何添加所有月份(名称),我希望它们像这样:

   2009 Ian Feb Mar Apr Mai Iun Iul Aug Sept Oct Noi Dec       
   2008 Ian Feb Mar Apr Mai Iun Iul Aug Sept Oct Noi Dec
   2007 Ian Feb Mar Apr Mai Iun Iul Aug Sept Oct Noi Dec

带有有条目的月份的链接。

感谢您的帮助!

附注对不起我的英语不好

LE:也许我以错误的方式提出了问题,我知道如何获取日期,但我不知道如何将它们格式化为如下所示:

   2009 Ian Feb Mar Apr Mai Iun Iul Aug Sept Oct Noi Dec       
   2008 Ian Feb Mar Apr Mai Iun Iul Aug Sept Oct Noi Dec
   2007 Ian Feb Mar Apr Mai Iun Iul Aug Sept Oct Noi Dec

我能从中得到的一切arch = Post.objects.dates('date', 'month', order='DESC')

with

{{ archives }}在模板中是这样的:

[datetime.datetime(2009, 10, 1, 0, 0), datetime.datetime(2009, 9, 1, 0, 0),
 datetime.datetime(2008, 10, 1, 0, 0), datetime.datetime(2007, 10, 1, 0, 0)]

然后我尝试了一个循环:

{% for archive in archives %}

{{ archive }} <br />

{% endfor %}

and got:

2009-10-01 00:00:00 
2009-09-01 00:00:00 
2008-10-01 00:00:00 
2007-10-01 00:00:00 

之后尝试了这样的事情:

{% for archive in archives %}

{{ archive|date:"Y: m" }} <br />

{% endfor %}

and got:

2009: 10 
2009: 09 
2008: 10 
2007: 10 

在这里我被困住了,不知道如何格式化数据,这样我就可以得到所有月份的不同年份,并且只有有条目作为链接的月份......

有任何想法吗?

先感谢您!


首先,日期时间格式字符串在Django 文档 http://docs.djangoproject.com/en/dev/ref/templates/builtins/#now。我认为你想要大写而不是小写“M”。

由于您想要显示一年中的所有 12 个月,即使只有部分月份有帖子,我们也会创建一个archives要传递给模板的对象。我选择使用字典

  • 关键是岁月
  • 这些值是 12 的列表[datetime, bool]对,其中datetime代表一个月,并且bool is True如果该月有帖子。

这是我们如何构建archives视图中的对象。

from datetime import date

def archive(request):
    arch = Post.objects.dates('date', 'month', order='DESC')

    archives = {}

    for i in arch:
        year = i.year
        month = i.month
        try:
            archives[year][month-1][1]=True
        except KeyError:
            # catch the KeyError, and set up list for that year
            archives[year]=[[date(y,m,1),False] for m in xrange(1,13)]
            archives[year][month-1][1]=True

    return render_to_response('blog/arhiva.html', 
              {'archives':sorted(archives.items(),reverse=True)})

在模板中,我们循环遍历每年的月份,并在适当的情况下显示链接。

{% for year, month_list in archives %}
  {{ year }} archives: 
  {% for month, has_link in month_list %}
    {% if has_link %}<a href="/{{ month.year }}/{{ month.month }}/">{% endif %}
      {{ month|date:"M" }}
    {% if has_link %}</a>{% endif %}
  {% endfor %}
{% endfor %}

我还没有检查所有代码,因此可能存在一些错误。最好使用url模板标签 http://docs.djangoproject.com/en/dev/ref/templates/builtins/#url对于链接,而不是硬编码 url 格式。我觉得我的答案可能过于复杂,但我花了一段时间才把它写下来,所以我不妨与全世界分享。


国际化

我没有使用过Django的国际化功能,所以我无法真正帮助翻译。我建议你看看文档 http://docs.djangoproject.com/en/dev/topics/i18n/,如果有不明白的地方,再问一个问题。

话虽如此,如果你想仅显示罗马尼亚语的月份,这是一种丑陋的方法。

首先,将以下行添加到视图中存档函数的顶部。

rom_months = ['Ian', 'Feb', 'Mar', 'Apr', 'Mai', 'Iun', 
              'Iul', 'Aug', 'Sept', 'Oct', 'Noi', 'Dec']

然后将以下行替换到您的视图中

archives[year]=[[date(y,k+1,1),False,rom] for k, rom in enumerate(rom_months)]

最后将以下内容替换到模板中

...
{% for month, has_link, rom_month in month_list %}
  {% if has_link %}<a href="/{{ month.year }}/{{ month.month }}/">{% endif %}
  {{ rom_month }}
...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于 Django 年/月的帖子存档 的相关文章

随机推荐

  • 嵌套对象的打字稿字符串点表示法

    我有一个翻译字符串的嵌套对象 如下所示 viewName componentName title translated title 我使用接受点表示法字符串的翻译库来获取字符串 如下所示translate viewName componen
  • 返回 Git 中的 N 个提交以查找导致测试回归的提交

    是否有一个命令可以让我根据与当前提交的距离而不是使用提交 ID 来签出提交 Use Case 基本上我正在考虑设置一个 cron 作业类型脚本来在构建服务器上执行以下操作 拉取特定 git 分支的最新版本 git pull dev 构建它
  • IOS7 iPad 上智能应用横幅关闭后不出现

    简而言之 我的团队有一个移动网站和应用商店中的一个应用程序 我们添加了元标记来显示智能应用程序横幅 我看到了 一切都按预期进行 问题是 我刚刚关闭了横幅 现在它没有重新出现 我对 Ted com 智能应用横幅做了同样的事情 得到了相同的结果
  • 仅当单个 NaN 时才进行插值

    pandas 有没有办法只插入单个缺失的数据点 也就是说 如果有 2 个以上连续的 NaN 我想不理会它们 所以 举个例子 s pd Series 1 None 2 3 None None 4 5 d interpolate limit 1
  • 没有足够的配额来处理此命令 -WPF

    我正在开发 WPF 应用程序 我已经为此应用程序实现了错误处理并实现了错误邮件发送功能 因此 如果应用程序发生任何错误 管理员将收到错误消息 我的问题是我们总是收到以下错误消息 Error 没有足够的配额来处理此命令 MS Win32 Un
  • xml 格式变化时的 xpath 查询

    我有一系列变量类型 例如 abc1A abc1B abc3B xyz1A xyz2A xyz3C data1C data2A 以多种xml格式存储 area
  • 系统虚拟化:了解 IO 虚拟化和虚拟机管理程序的作用 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我想对I O虚拟化有一个正确的理解 上下文是纯 全虚拟化 而不是半虚拟化 我的理解是 虚拟机管理程序虚拟化硬件并向每个沙盒应用程序提供虚拟资源 每个沙
  • 检测“位图中”的形状

    所以 在为下一场 ieextreme 比赛做准备时 我遇到了一些过去的问题 我发现一个真正困扰我的问题 因为我不知道该怎么做 我可能可以使用一些 300 行的暴力代码来实现它 但我我认为这不是在这样的比赛中应该做的事情 所以我需要你的帮助
  • 防止直接访问网站某些目录的最佳方法是什么?

    防止直接访问网站的某些目录的最佳方法是什么 1 创建并放置 htaccess我们要保护的每个目录中的文件并将下一行放入其中 Deny from all 2 创建并放置index php我们要保护的每个目录中的文件 并仅在其中放置下一行代码
  • 内部文件夹中的 ASP.NET Server.Mappath 问题

    我有一个 ASP NET 应用程序 在 APP Code 文件夹中我有一个类 我有以下代码来读取根文件夹中 XML 文件的内容 XmlDocument xmlSiteConfig new XmlDocument xmlSiteConfig
  • 了解皮尔逊相关系数

    作为生成计算的一部分皮尔逊相关系数 http devlicio us blogs billy mccafferty archive 2006 11 07 netflix memoirs using the pearson correlati
  • Rails 替换集合,而不是从 has_many 嵌套属性表单添加到集合中

    我有这些模型 为了便于阅读而简化 class Place lt ActiveRecord Base has many business hours dependent destroy accepts nested attributes fo
  • 在 JSF 中使用 JPA 实体。防止 LazyInitializationException 的最佳策略是什么?

    希望听取专家关于从 JSF UI 编辑 JPA 实体的最佳实践的意见 所以 关于这个问题 我要说几句话 想象一下我有持久化的对象MyEntity我获取它进行编辑 在 DAO 层我使用 return em find MyEntity clas
  • 如何使用文件实现循环缓冲区?

    我的应用程序 C 程序 打开同一文件的两个文件句柄 一个处于写入模式 一个处于读取模式 应用程序中的两个单独的线程读取和写入文件 这很好用 由于我的应用程序在 RAM 磁盘大小有限的嵌入式设备上运行 我想写FileHandle在达到最大大小
  • 如何按用途自动对类中的函数进行排序?

    a Robert C Martin 的 Clean Code 一书建议根据 降级规则 对函数进行排序 我们希望代码读起来像自上而下的叙述 我们想要每一个 函数之后是下一个抽象级别的函数 因此 我们可以读取该程序 下降一个抽象级别 我们阅读函
  • 交换 img src 或显示/隐藏多个图像是否更快?

    在网页上交换图像时使用的最佳做法是什么 更改图像源或只是在页面上显示 隐藏多个图像 为了平衡速度 你必须做出选择 有两个选择 更改图像源 这样 页面加载速度会更快 因为它只获取可见图像 但当您更改 src 属性时 显示新图像将花费更长的时间
  • 如何创建具有逐字环境的新 Beamer 环境?

    我正在创建一个 Beamer 演示文稿 其中包含大量 LaTeX 示例 并且必须在逐字环境中进行 我厌倦了打字 begin example begin verbatim Verbatim Text end verbatim end exam
  • 对于大输入,十进制扩展程序运行速度非常慢

    我正在编写一个程序来计算数字的小数扩展103993 33102我想根据用户输入的数字打印出所有尾随小数 它可以快速运行所有数量最多10 5但如果输入10 6编程大约需要 5 分钟才能打印出答案 我怎样才能加快速度 我尝试了两种不同的方法 一
  • Java从ZipInputStream条目创建InputStream

    我想编写一个从单个 InputStream 读取 ZIP 内的多个 XML 文件的方法 该方法将打开一个 ZipInputStream 并在每个 xml 文件上获取相应的 InputStream 并将其提供给我的 XML 解析器 这是该方法
  • 基于 Django 年/月的帖子存档

    我是 Django 新手并启动了一个应用程序 我做了模型 视图 模板 但我想在底部添加某种存档 页面的内容 类似这样http www flickr com photos ionutgabriel 3990015411 http www fl