Перенести метки URL в django 1.5
Я пытаюсь перенести старое приложение django на django 1.5. Есть 745 URL-адресов в разных html файлах следующим образом:
{% url url_name %}
Если я не ошибаюсь, это было устарело и больше не может использоваться с django 1.5 (как сказано здесь), и я должны преобразовать их все в:
{% url 'url_name' %}
Любая идея сделать это без сумасшедшего? Может быть, какой-то script, я не знаю...
Я не могу представить себе способ сделать это с заменой в пути.
Мне, вероятно, не хватает чего-то очевидного.
Ответы
Ответ 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