Django:获取当前项目的git修订号

发布于 2024-12-08 15:56:56 字数 228 浏览 2 评论 0原文

对于我的 django 项目,我需要读取为该站点提供支持的项目的当前 git 修订号,假设该项目是 git 存储库的根目录。

这样我将保持我的 css 和 js 页面始终是最新的:

<link rel="stylesheet" type="text/css" href="/media/css/app.css?v46"> 

其中 46 是修订号。

For my django project, I need to read the current git revision number of my project that powers the site, assuming the project is the root dir of the git repository.

This way I will be keeping my css and js pages always up to date as such:

<link rel="stylesheet" type="text/css" href="/media/css/app.css?v46"> 

Where 46 is the revision number.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

何必那么矫情 2024-12-15 15:56:56

好的,很抱歉回答您的问题,但您可能需要注意以下几点:

  1. Git 没有修订号(好吧,也许有。阅读 )
  2. 如果您这样做,即使您在单个不相关的文件中进行了微小的更改(例如一些数据库逻辑,与实际提供的 .css 文件完全无关 ,您的网站也会刷新其缓存给客户)
  3. 这使得它成为坏主意
  4. 但是,您可以使用 last-modified 文件系统属性进行相同的操作 (os.path.getmtime("path.to.file"))

Okay, sorry for not answering your question but there are a couple of points you might want to note:

  1. Git doesn't have revision numbers (okay, maybe it does. Read comments below)
  2. If you do this, your site will refresh it's cache even if you make a minor change in a single unrelated file (for example some database logic, totally irrelevant to the actual .css file served out to clients)
  3. Which makes it a bad idea.
  4. You could however use the last-modified filesystem property for the same (os.path.getmtime("path.to.file"))
浪菊怪哟 2024-12-15 15:56:56

您可能想研究一下可以为您解决这个问题的项目,例如 django-mediagenerator:
http://www.allbuttonspressed.com/projects/django-mediagenerator

无需重新发明轮子;)

You might want to look into projects which take care of this problem for you, like django-mediagenerator:
http://www.allbuttonspressed.com/projects/django-mediagenerator

No need to reinvent the wheel ;)

知你几分 2024-12-15 15:56:56

我通过向我的 django 项目添加 templatetag 解决了这个问题:

在 proj/templatetags 中,添加了 version.py:

from django import template
import time
import os

register = template.Library()

@register.simple_tag
def version_date():
    return time.strftime('%m/%d/%Y', time.gmtime(os.path.getmtime('../.git')))

然后,在我的 base.html 中,添加:

{% load version %}
<span class='version'>Last Updated: {% version_date %}</span>

如果您根据日期/时间选择,则可以调整它以使用版本号,然后附加到您的样式表/js 文件中。

I solved this by adding a templatetag to my django project:

in proj/templatetags, added version.py:

from django import template
import time
import os

register = template.Library()

@register.simple_tag
def version_date():
    return time.strftime('%m/%d/%Y', time.gmtime(os.path.getmtime('../.git')))

Then, in my base.html, adding:

{% load version %}
<span class='version'>Last Updated: {% version_date %}</span>

You could tweak it to use a version num if you choose based on date/time, then append to your stylesheets/js files.

我不是你的备胎 2024-12-15 15:56:56
  1. 我认为,您不想在参数中使用提示更改集 ID,请参阅 @aviral-dasgupta 答案的注释 2,但要使用最后更改此文件更改集的 id,以便仅当文件更改
  2. Git 中的更改集 ID 时才重新缓存是长 40 位十六进制哈希值,人类很难读取
  3. Git 本身不支持 RCS 风格的关键字扩展。
  4. 如果您仍然需要它,请阅读类似问题的完整答案 来自@jakub-narebski。 Pro Git 阅读也可以帮助理解(有一个很好的例子,使用 $Date$ 过滤器关键词构建)
  1. I think, you don't want to use tip changeset ID in parameter, see note 2 of @aviral-dasgupta answer, but id of last-change-this-file changeset in order to resresh cache only when file changed
  2. Changeset ID in Git is long 40-digits hex-hash, hardly readed by human
  3. Git haven't natively support for RCS-style keyword expansion.
  4. If you still want it, read this full answer on similar question from @jakub-narebski. Pro Git reading can help understand also (with nice example of using filters for $Date$ keyword constructing)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文