Лучше сохранить слаг в БД или генерировать динамически? - PullRequest
5 голосов
/ 10 октября 2009

Я работаю над проектом django и хотел бы добавить слаг в конце URL, как это делается здесь на stackoverflow.com: http://example.com/object/1/my-slug-generated-from-my-title

Идентификатор объекта будет использоваться для поиска элемента, а не слага, и, как и stackoverflow.com, слаг не будет иметь значения при получении ссылки (только при ее отображении).

Вопрос : есть ли недостаток (или потенциал) для динамического генерирования слага, а не для сохранения его как фактического поля базы данных?

Например (не реальный код):

class Widget(models.Model):
    title = models.CharField()

    def _slug(self):
      return slugify(self.title)
    slug = property(_slug)

Вместо того, чтобы использовать что-то вроде AutoSlugField ( например )?

Поскольку мой план состоит в том, чтобы он соответствовал названию, я не знал, имеет ли смысл иметь дублирующее поле в базе данных.

Спасибо!

Ответы [ 4 ]

8 голосов
/ 10 октября 2009

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

Кроме того, пример кода, который вы разместили, может быть написан так:

@property
def slug(self):
  return slugify(self.title)
2 голосов
/ 06 августа 2010

Попробуйте составить кусок слова "кафе" или "浦 安 鉄 筋 家族".

Скорее всего, это будет выглядеть как пу, если вы не очень хорошо подготовлены.

Иногда вам нужна возможность настраивать слизней.

1 голос
/ 10 октября 2009

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

В любом случае все в порядке, это зависит только от вашей производительности и требований к пространству.

0 голосов
/ 22 октября 2009

Основным недостатком динамической генерации слагов является то, что вы упускаете возможность настраивать слагов для каждого объекта, например. сделать их короче и красивее. Для английских названий это может быть хорошо, но для неанглийского контента сгенерированные слагы могут быть некрасивыми.

...