Django のコードを読んでいると、モデルで「スラッグ」と呼ばれるものをよく見かけます。これが何なのかよくわかりませんが、URL と関係があることはわかっています。このナメクジはいつ、どのように使用されるのですか?
(この用語集でその定義を読みました。)
「スラッグ」は、通常、すでに取得されているデータを使用して、有効な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と意味のある名前でどのように参照しますか?たとえば、Article.idを使用すると、URLは次のようになります。
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も参照してください。
歴史的な文脈を提供できる場合:
「スラッグ」という用語は、鋳造金属 (この場合は鉛) に関係しており、そこからプレス フォントが作成されました。その後、すべての紙は、何度も印刷した後に磨耗したため、フォント工場で定期的に再溶解され、新しい金型で再鋳造されました。私のような見習いはそこでキャリアをスタートさせ、トップにまで上り詰めました (今はそうではありません)。
タイポグラフは、記事のテキストを後ろ向きに構成し、先頭文字を賢明に積み重ねる必要がありました。そのため、印刷時に文字は紙にまっすぐになります。すべての活版印刷は、印刷されたものと同じくらい速くミラー化された新聞を読むことができました. したがって、ナメクジ (カタツムリのような) もスロー ストーリー (最後に修正される) もベンチで待っていました。いくつかの「ホットな」ニュースがベンチで待っていました。最終的な組み立てと最終的な印刷の前に、土壇場での修正の可能性があります (夕刊)。
Django は、カンザス州のローレンス ジャーナルのオフィスから生まれました。おそらくいくつかの印刷専門用語がまだ残っている場所. フランス出身のジャンゴ愛好家でフレンドリーなナメクジ少年。
「ナメクジ」という用語は、新聞制作の世界から来ています。
物語の制作過程で付けられた略称です。ストーリーがビート レポーター (これらはもう存在すると仮定しますか?) から編集者、そして「印刷機」へとその経路を曲がりくねって進みます。ケイトとウィリアムの話?」.
一部のシステム (Django など) では、スラッグを URL の一部として使用してストーリーを見つけますwww.mysite.com/archives/kate-and-william
。
スタック オーバーフロー自体でさえ、GEB っぽい(a)自己参照https://stackoverflow.com/questions/427102/what-is-a-slug-in-django/427201#427201
を使用してこれを行いますが、スラッグを に置き換えることはできますが、blahblah
それでも問題ありません。
脚本には各シーンの開始時に「スラッグライン」があり、基本的にそのシーンの背景 (場所、時間など) を設定しているため、それよりも前にさかのぼることさえあります。これは、次のことの前置きまたは前置きであるという点で非常に似ています。
ライノタイプ マシンでは、スラグは個々の文字フォームから作成された 1 つの線の金属片でした。行全体に対して 1 つのスラッグを作成することで、これまでの文字ごとの合成が大幅に改善されました。
以下は純粋な推測ですが、スラッグの初期の意味は、偽造コイン (何らかの方法で押さなければならない) を意味していました。使用法が印刷用語に変換され (スラッグは元の文字を使用して押さなければならなかったため)、そこから「金属片」の定義から「ストーリーの要約」の定義に変わることを想像できました。そこから、適切な印刷からオンラインの世界への短いステップです。
(a) Douglas Hofstadterによる「Godel Escher, Bach」、私は (少なくとも) 現代の偉大な知的作品の 1 つと考えています。彼の他の作品「Metamagical Themas」もチェックしてください。
スラッグは新聞用語です。slug は、文字、数字、アンダースコア、またはハイフンのみを含む、何かの短いラベルです。通常、URL で使用されます。(Django ドキュメントのように)
Django の slug フィールドは、動的に作成された Web ページの有効なURLを保存および生成するために使用されます。
この質問を Stack Overflow に追加して動的ページが生成されたのと同じように、アドレス バーに表示されると、スペースの代わりに「-」が付いた質問のタイトルが表示されます。それがまさにナメクジ畑の仕事です。
あなたが入力したタイトルはこのようなものでした -> Djangoの「slug」とは何ですか?
slug フィールドに格納すると、「what-is-a-slug-in-django」になります (このページの URL を参照)。
Slug は、特定のコンテンツの URL に適した短いラベルです。文字、数字、アンダースコア、またはハイフンのみが含まれています。スラッグは通常、それぞれのコンテンツとともに保存され、URL 文字列として渡されます。
SlugField を使用して Slug を作成できます
元:
class Article(models.Model):
title = models.CharField(max_length=100)
slug = models.SlugField(max_length=100)
タイトルをスラッグとして使用したい場合、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)
一意性が必要な場合はunique=True
、スラッグ フィールドに追加します。
たとえば、前の例から:
class Article(models.Model):
title = models.CharField(max_length=100)
slug = models.SlugField(max_length=100, unique=True)
あなたはスラグ処理をするのが面倒ですか? 心配しないでください。このプラグインが役に立ちます。 django-autoslug
ここから。
「スラッグ」は新聞用語ですが、ここで意味するのは URL の最後の部分です。たとえば、「Django について少し」というタイトルの投稿は、自動的に「django について少し」になります (もちろん、自動生成されたスラッグが気に入らなければ、簡単に変更できます)。
これは URL の記述的な部分であり、より人間にわかりやすいものにするためにありますが、必ずしも Web サーバーによって要求されるわけではありません - Django の「スラッグ」とは? スラッグは「in-django-what-is-a-slug」ですが、スラッグは提供されるページを決定するために使用されません(少なくともこのサイトでは)
また、django-adminで自動スラッグ。ModelAdminで追加:
prepopulated_fields = {'slug': ('title', )}
ここのように:
class ArticleAdmin(admin.ModelAdmin):
list_display = ('title', 'slug')
search_fields = ('content', )
prepopulated_fields = {'slug': ('title', )}
これは、通常、既に取得したデータを使用して有効な URL を生成する方法です。たとえば、記事のタイトルを使用して URL を生成します。