django.core.urlresolvers.NoReverseMatch: Reverse for 'pages-details-by-slug'
17 февраля 2017 г. 6:26
Ошибка django.core.urlresolvers.NoReverseMatch: Reverse for 'pages-details-by-slug' может возникнуть при выполнении метода get_absolute_url() экземпляра класса Page из management команды. Дело в том, что когда вызывается management команда, page ничего не знает об используемом языке (language) и валится в следующем куске кода:
def get_absolute_url(self, language=None, fallback=True):
if not language:
language = get_language() # автоматически не удаётся определить language
with i18n.force_language(language):
if self.is_home:
return reverse('pages-root')
path = self.get_path(language, fallback) or self.get_slug(language, fallback)
return reverse('pages-details-by-slug', kwargs={"slug": path}) # и происходит ошибка, так как path не определился
Пример того, как можно установить язык:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from cms.models import Page
from django.core.management.base import BaseCommand
from django.utils.translation import activate
class Command(BaseCommand):
def handle(self, *args, **options):
activate('ru')
for page in Page.objects.all():
url = page.get_absolute_url()
Теперь язык автоматом найдётся методом get_language() в get_absolute_url(), даже если мы не передали аргумент language.
Похожие статьи:
Представляю вашему вниманию книгу, написанную моим близким другом Максимом Макуриным: Секреты эффективного управления ассортиментом.
Книга предназначается для широкого круга читателей и, по мнению автора, будет полезна специалистам отдела закупок и логистики, категорийным и финансовым менеджерам, менеджерам по продажам, аналитикам, руководителям и директорам, в компетенции которых принятие решений по управлению ассортиментом.
Комментарии: 0