web-dev-qa-db-ja.com

Djangoの「ナメクジ」とは何ですか?

私がDjangoのコードを読むとき、私はモデルでよく "スラッグ"と呼ばれるものを見ます。これが何であるかはよくわかりませんが、URLと関係があることはわかっています。このナメクジはいつ、どのようにして使用されるのでしょうか。

(その定義は この用語集 で読んでいます。)

495
Jonas

これは有効なURLを生成するための方法です。一般的には既に取得済みのデータを使用します。たとえば、記事のタイトルを使用してURLを生成します。手動で設定するのではなく、タイトル(または他のデータ)を指定して、関数を使用してスラッグを生成することをお勧めします。

例:

<title> The 46 Year Old Virgin </title>
<content> A silly comedy movie </content>
<slug> the-46-year-old-virgin </slug>

では、次のようなDjangoモデルがあるとしましょう。

class Article(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField(max_length=1000)
    slug = models.SlugField(max_length=40)

このオブジェクトを意味のある名前のURLでどのように参照しますか。 URLが次のようになるようにArticle.idを使用できます。

www.example.com/article/23

または、タイトルを次のように参照することもできます。

www.example.com/article/The 46 Year Old Virgin

問題は、URLではスペースが有効ではないため、スペースを%20に置き換える必要があることです。

www.example.com/article/The%2046%20Year%20Old%20Virgin

それは私たちの意味のあるURLを解決していません。これはもっと良くないでしょう。

www.example.com/article/the-46-year-old-virgin

それはナメクジです。 the-46-year-old-virgin。すべての文字は小文字になり、スペースはハイフン-に置き換えられます。例として、このWebページのURLを参照してください。

635
Josh Smeaton

もし私が歴史的な文脈をいくつか挙げようと思うなら:

"slug"という用語は、鋳造用の金属(この場合は鉛)と関係があり、その中からプレスフォントが作られました。多くの印刷物の後にそれらがすり減ったので、すべての紙はその時そのフォント工場が定期的に再溶解されて、そして新しい金型で作り直されました。私のような見習いはそこで彼らのキャリアを始めて、そしてずっとトップに行きました(もう終わりません)。

活版印刷では、先頭文字を賢く積み重ねて、記事のテキストを逆方向に作成する必要がありました。印刷時には、文字は紙の上にまっすぐになります。すべての活版印刷機は、印刷されたものと同じ速さでミラーリングされた新聞を読むことができました。したがって、ナメクジ(カタツムリのような)も遅い物語(最後に修正される)もベンチ待機中のものが多く、もっぱら最初の手紙で識別され、大部分は全体的により読みやすくなった。最後の議会と決定的な印刷の前に可能な最後の分の修正、(夕方の紙)のために、いくつかの「熱い」ニュースがベンチでそこで待っていました。

Djangoはカンザス州のローレンス誌の事務所から登場しました。おそらくいくつかの印刷専門用語はまだ残っています。 A-Django-愛好家 - & - フランスからの親切なスラッグボーイ

110
MikkaH Savva

ちょっとした歴史として、「スラッグ」という用語は新聞編集の世界から来ています。

製造過程で物語に付けられる非公式の名前です。物語がビートレポーターから編集者、そして「印刷機」に至るまでの厄介な道を切り開くにつれて、これは参照される名前になります。 "".

DjangoはそれをURLの一部として使用してストーリーを探します。例はwww.mysite.com/archives/russia-cuts-europe-gasです。

51
paxdiablo

から ここ

「スラッグ」は新聞の用語ですが、ここで意味するのはURLの最後の部分です。たとえば、「Aについてabout Django」というタイトルの投稿は自動的に「bit-about-Django」になります(もちろん、自動生成されたスラッグが気に入らない場合は簡単に変更できます)。

21
BobbyShaftoe

スラッグは新聞の用語です。スラグは、文字、数字、アンダースコア、ハイフンのみを含む、短いラベルです。(Djangoのドキュメントのように)これらは一般的にURLで使用されます。

Djangoのスラッグフィールドは動的に作成されたWebページの有効な RL を格納し生成するために使用されます。

この質問をStack Overflowに追加したときと同じように動的ページが生成され、アドレスバーに表示されるときには、スペースの代わりに " - "が付いた質問のタイトルが表示されます。それはまさにナメクジ畑の仕事です。

Enter image description here

あなたが入力したタイトルはこんな感じでした - > Djangoの「ナメクジ」とは何ですか?

それをスラッグに格納すると、それはDjangoというスラッグに格納されます(このページのURLを参照)。

20
Manjit Kumar

これはURLをわかりやすくするためのものですが、必ずしもWebサーバーに要求されるわけではありません - in Djangoの「スラッグ」とは何ですか? スラッグは 'in-Django-スラッグ'ですが、スラッグは 提供されるページを決定するためには使用されません (少なくともこのサイトで)

16
Cebjyre

スラッグは、特定のコンテンツを表すURLに適した短いラベルです。文字、数字、アンダースコア、ハイフンのみが含まれています。スラッグは通常それぞれのコンテンツと共に保存され、URL文字列として渡されます。

SlugはSlugFieldを使用して作成できます

例:

class Article(models.Model):
    title = models.CharField(max_length=100)
    slug = models.SlugField(max_length=100)

スラッグとしてtitleを使いたい場合は、Djangoにslugifyという簡単な関数があります

from Django.template.defaultfilters import slugify

class Article(models.Model):
    title = models.CharField(max_length=100)

    def slug(self):
        return slugify(self.title)

一意性が必要な場合は、slugフィールドにunique=Trueを追加してください。

例えば、前の例から:

class Article(models.Model):
    title = models.CharField(max_length=100)
    slug = models.SlugField(max_length=100, unique=True)

スラッグ処理をするのが面倒ですか?心配しないで、このプラグインはあなたを助けるでしょう。 Django-autoslug

15
Simplans

Django-adminでも自動スラグ。 ModelAdminに追加されました:

prepopulated_fields = {'slug': ('title', )}

ここに

class ArticleAdmin(admin.ModelAdmin):
    list_display = ('title', 'slug')
    search_fields = ('content', )

    prepopulated_fields = {'slug': ('title', )}
7
Alexey Kuzmin

スラッグ

文字、数字、アンダースコア、ハイフンのみを含む、何かに対する短いラベル。それらは通常URLで使用されます。例えば、典型的なブログエントリのURLでは:

https://www.djangoproject.com/weblog/2008/apr/12/spring/ 最後のビット(春)はスラッグです。

1
Sonia Rani