подключение - Номер версии в приложениях Django



django{% block %} (6)

Да, не для приложений Django, а для модулей Python. См. PEP 396 , PEP 386 и библиотеку verlib ( easy_install verlib ).

(Я бы уточнил, но я только что открыл это сам.)

https://src-bin.com

Я работаю над приложением Django и хочу показать версию приложения (чтобы люди, которые находят ошибки, знали версию приложения и могли предоставить более качественные отчеты об ошибках).

Существует ли общепринятый способ хранения номера версии в Django (я имею в виду версию моего приложения, а не Django)?


Answer #1

Для меня лучший результат / подход - это использовать init .py в папке проекта, например:

.
├── project_name
   ├── __init__.py

и позже проверьте, используя стандартный способ, как сказано в ( PEP396 )

>>> import proyect_name
>>> proyect_name.__version__
'1.0.0'

Answer #2

Кажется, файл настроек будет разумным местом для хранения номера версии. Я не верю, что есть какой-либо принятый Django способ сохранить номер версии вашего личного приложения. Это похоже на специфическую переменную приложения, которую вы должны определить.

Для получения дополнительной информации о получении номера версии из SVN: автоматическое получение номера версии SVN в программе


Answer #3

При использовании GIT для управления версиями исходного кода может потребоваться ручное продвижение стабильных выпусков и автоматическая нумерация для коммитов разработки.

Одна из причин получения этого в проекте Django:

В «PROJECT / _ init _.py» определите:

__version__ = '1.0.1'
__build__ = ''

Затем в setting.py сделайте:

import os
import subprocess
import PROJECT

BASE_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..',))

try:
    PROJECT.__build__ = subprocess.check_output(["git", "describe", "--tags"], cwd=BASE_DIR).decode('utf-8')
except:
    PROJECT.__build__ = PROJECT.__version__ + " ?"

Таким образом, PROJECT._ build_ покажет:

v1.0.1 in stable releases

а также

v1.0.1-N-g8d2ec45 

когда самый последний тег не указывает на последний коммит (где N подсчитывает количество дополнительных коммитов после тега, за которыми следует подпись коммита)


Answer #4

Я использовал контекстный процессор, и это выглядит так:

import sys
sys.path.append('..')

from content_services import __version__


def get_app_version(request):
    """
    Get the app version
    :param request:
    :return:
    """
    return {'APP_VERSION': __version__}

Поскольку имя проекта - content_services мне нужно изменить путь sys на 1 уровень, чтобы я мог его импортировать.


Answer #5

Я решил это, добавив тег шаблона в мой проект django:

в 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>




django