Нулевое заполнение номеров в Djangos URLconf - PullRequest
1 голос
/ 23 мая 2011

В документации Django приведен пример шаблона для URL статьи:

(r'^articles/(\d{4})/(\d{2})/(\d+)/$', 'news.views.article_detail'),

Таким образом, только 2011/05/23/ будет соответствовать, но не 2011/5/23/

В другой части документов, где поясняется постоянная ссылка декоратор , шаблон

(r'/archive/(?P<year>\d{4})/(?P<month>\d{1,2})/(?P<day>\d{1,2})/$', archive_view)

И код для создания постоянной ссылки

@models.permalink
def get_absolute_url(self):
    return ('archive_view', (), {
        'year': self.created.year,
        'month': self.created.month,
        'day': self.created.day})

В частности, месяц изменился с \d{2} до \d{1,2}, поэтому 2011/05/23/ и 2011/5/23/ теперь будут совпадать; метод get_absolute_url создаст вторую ссылку без нуля в начале.

Чтобы создать постоянную ссылку для первого регулярного выражения (\d{2}), я мог бы написать str(self.created.month).zfill(2) в методе, но это кажется немного громоздким и слишком избыточным (если я изменю URLconf, мне нужно будет изменить get_absolute_url метод тоже) мне.

Кроме того, теперь у нас есть несколько URL, которые отображают одинаковое содержимое (2011/05/03/, 2011/5/03/, 2011/05/3/ и т. Д.), Может ли это быть проблемой, например, для поисковых систем? По крайней мере, это может привести к несовместимым URL-адресам.

Есть ли (простой) способ перенаправить все URL-адреса на заполненные нулями (2011/5/3/2011/05/03/), а также автоматически всегда создавать их с нулевым заполнением, поэтому мне не нужно возиться с такими методами, как get_absolute_url с str () и zfill и можете просто передать число?

Ответы [ 2 ]

0 голосов
/ 29 июля 2012

Из url.py удалите ненужную ссылку, содержащую несуществующие представления.

0 голосов
/ 23 мая 2011

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

Вы можете ослабить регулярное выражение так, чтобы оно не требовало нуля, как вы описали, что может привести к дублированию контента. Однако @Matt не считает, что контент должен быть выставлен по обоим URL-адресам, чтобы поисковые системы считали его дублирующим. Скорее всего, все URL на вашем сайте будут состоять из тега reverse (или models.permalink около get_absolute_url) или шаблона {% url %}. Следовательно, все URL-адреса будут иметь одинаковый формат, т. Е. Без нулей, а поисковая система никогда не увидит нулевую версию.

Кроме того, вы можете использовать канонический тег, чтобы поисковые системы знали, что контент не дублируется, а просто доступен через несколько URL-адресов.

<link rel="canonical" href="http://domain.com/archive/2011/5/3/" />

Так что поисковым системам не о чем беспокоиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...