Подтвердить что ты не робот

Перенести метки URL в django 1.5

Я пытаюсь перенести старое приложение django на django 1.5. Есть 745 URL-адресов в разных html файлах следующим образом:

{% url url_name %}

Если я не ошибаюсь, это было устарело и больше не может использоваться с django 1.5 (как сказано здесь), и я должны преобразовать их все в:

{% url 'url_name' %}

Любая идея сделать это без сумасшедшего? Может быть, какой-то script, я не знаю... Я не могу представить себе способ сделать это с заменой в пути.

Мне, вероятно, не хватает чего-то очевидного.

4b9b3361

Ответ 1

ПРИМЕЧАНИЕ. Эта команда является разрушительной. Используйте управление версиями или создайте резервную копию своего каталога шаблонов, прежде чем запускать его.

Вы можете использовать sed. Из каталога шаблонов (или каталогов) запустите

sed -i -r -e "s#\{% url ([a-zA-Z0-9_.:-]+)#\{% url '\1'#g" *

Выражение соответствует {% url [view name], поэтому аргументы, предоставленные тегу шаблона url, не будут изменены/не изменены.

Чтобы запустить его рекурсивно,

find . -type f -print0 | xargs -0 sed -i -r -e "s#\{% url ([a-zA-Z0-9_.:-]+)#\{% url '\1'#g"

Эта команда sed предполагает, что ваши имена имен содержат только буквенно-цифровые символы, двоеточия, тире, периоды и символы подчеркивания - никаких других специальных символов. Теперь поддерживает представления с именами.

Протестировано против тегов в этом Django 1.4 тэге шаблона шаблона URL

Ответ 2

Существует также фрагмент с решением в python в http://djangosnippets.org/snippets/2905/

Просто предупреждение, находка. -type f -print0 найдет файлы, которые "скрыты" как файлы в ваших .git/или .hg/каталогах и могут повредить ваш репозиторий или другие двоичные файлы.

Если вы используете обычное соглашение в django с вашими файлами шаблонов, заканчивающимися на .html, вы можете искать более осторожно с помощью:

find . -iname '*.html' -type f -print > file.list

сначала проверьте файл .list, чтобы проверить, какие файлы были изменены, прежде чем поместить его вместе с командой sed