2009-10-10 2 views
5

stackoverflow.comにここで行われているように私は、Djangoのプロジェクトに取り組んでいますし、URLの末尾にスラグを含めるしたいと思います:http://example.com/object/1/my-slug-generated-from-my-titleDBにスラッグを保存するか、動的に生成する方が良いでしょうか?

オブジェクトIDがアイテムを検索するために使用されます、ではありませんスラグ - そして、stackoverflow.comのように、スラッグはリンクを取得しても問題ありません(表示するだけで)。

Qestion:実際のデータベースフィールドとして保存するのではなく、スラッグを動的に生成することには欠点がありますか?例えば

(ないリアルコード):

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

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

むしろよりAutoSlugField(for example)のようなものを使用していますか?

私の計画はタイトルと一致するようになっているので、データベースに重複フィールドがあるのが分かりませんでした。

ありがとうございます!

答えて

8

装飾(ルックアップではなく)目的でスラッグを使用している場合は、それを動的に生成することをお勧めします。

また、あなたが投稿のサンプルコードは次のように書くことができます。

@property 
def slug(self): 
    return slugify(self.title) 
+0

このチップをお寄せいただきありがとうございます。感謝します。 – thornomad

1

欠点は、あなたが自動的にスラグページをレンダリングするたびに生成していることだろう。メリットは、決して直接照会されないフィールドでデータベース内のスペースを占有していないことです。

どちらの方法も問題ありません。どちらかと言えば、パフォーマンスとスペースの要件だけです。

+0

そうです、それは私の考えでした。私は、これらのメソッドの1つが_preferred_であったかどうかわかりませんでした。多分、それはサーバーに依存しています。 – thornomad

+0

どちらも無視できます。 1百万個のスラッグ、50バイトごとに50MBとなります。それを計算することもまた簡単です。 – Medorator

0

スラッグを動的に生成することの主な欠点は、オブジェクトごとにスラッグをカスタマイズする能力が欠けていることです。それらを短く、よりきれいにする。英語のタイトルではOKですが、英語以外のコンテンツではスラグが醜いことがあります。

2

「カフェ」または「浦安鉄筋家族」という言葉からスラグを作りましょう。

あなたが本当によく準備されていない限り、それはポーズのように見えるでしょう。

時々、スラッグをカスタマイズする必要があります。

+0

+1、興味深い。私はあなたがそれが(カスタマイズされている可能性がありますので)保存すべきであることを示唆していると思います。 – Edmund

+0

申し訳ありませんが、ええ、それは私が示唆しているものです。私はあまりにも明確ではなかった:) –

+0

あなたは手作業で外れ値をslugifyしますか?手動で行うことは、多くの設計で可能ではありません。ただし、スラッグをカスタマイズするための特定のルールに基づいて実行している場合は、それらのルールを動的に生成するためのルールをコーディングすることもできます。何か不足していますか? – Medorator

関連する問題