可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
When I read Django code I often see in models what is called a \"slug\". I am not quite sure what this is, but I do know it has something to do with URLs. How and when is this slug-thing supposed to be used?
(I have read its definition in this glossary.)
回答1:
It\'s a way of generating a valid URL, generally using data already obtained. For instance, using the title of an article to generate a URL. I\'d advise to generate the slug, using a function, given a title (or other piece of data), rather than setting it manually.
An example:
<title> The 46 Year Old Virgin </title>
<content> A silly comedy movie </content>
<slug> the-46-year-old-virgin </slug>
Now let\'s pretend that we have a Django model such as:
class Article(models.Model):
title = models.CharField(max_length=100)
content = models.TextField(max_length=1000)
slug = models.SlugField(max_length=40)
How would you reference this object with a URL, with a meaningful name? You could use Article.id so the URL would look like this:
www.example.com/article/23
Or, you could reference the title like so:
www.example.com/article/The 46 Year Old Virgin
Problem is, spaces aren\'t valid in URLs, they need to be replaced by %20
which is ugly, making it the following:
www.example.com/article/The%2046%20Year%20Old%20Virgin
That\'s not solving our meaningful URL. Wouldn\'t this be better:
www.example.com/article/the-46-year-old-virgin
That\'s a slug. the-46-year-old-virgin
. All letters are downcased and spaces are replaced by hyphens -
. See the URL of this very webpage for an example!
回答2:
If I may provide some historical context :
The term \"slug\" has to do with casting metal—lead, in this case—out of which the press fonts were made. Every paper then had its fonts factory regularly re-melted and recast in fresh molds, since after many prints they became worn out. Apprentices like me started their career there, and went all the way to the top (not anymore).
Typographs had to compose the text of an article in a backward manner with lead characters stacked in a wise. So at printing time the letters would be straight on the paper. All typographs could read the newspaper mirrored as fast as the printed one. Therefore the slugs, (like snails) also the slow stories (the last to be fixed) were many on the bench waiting, solely identified by their fist letters, mostly the whole title generally more readable. Some \"hot\" news were waiting there on the bench, for possible last minute correction, (Evening paper) before last assembly and definitive printing.
Django emerged from the offices of the Lawrence journal in Kansas. Where probably some printing jargon still lingers. A-django-enthusiast-&-friendly-old-slug-boy-from-France.
回答3:
As a bit of history, the term \'slug\' comes from the world of newspaper editing.
It\'s the informal name given to a story during the production process. As the story winds its torturous path from beat reporter through to editor through to the \"printing presses\", this is the name it is referenced by, e.g., \"Have you fixed those errors in the \'russia-cuts-europe-gas\' story?\".
Django uses it as part of the URL to locate the story, an example being www.mysite.com/archives/russia-cuts-europe-gas
.
回答4:
From here.
“Slug” is a newspaper term, but what
it means here is the final bit of the
URL. For example, a post with the
title, “A bit about Django” would
become, “bit-about-django”
automatically (you can, of course,
change it easily if you don’t like the
auto-generated slug).
回答5:
Slug is a newspaper term. A slug is a short label for something, containing only letters, numbers, underscores or hyphens.They’re generally used in URLs.(as in django docs)
A slug field in Django is used to store and generate valid URLs for your dynamically created web pages.
Just like the way you added this question on Stack Overflow and a dynamic page is generated and when you see in address bar you will see your question title with \"-\" in place of the spaces. That\'s exactly the job of a slug field.
The title entered by you was something like this -> What is a “slug” in Django?
&
On storing it into a slug, filed results it into
what-is-a-slug-in-django (see URL of this page)
回答6:
It\'s a descriptive part of the URL that is there to make it more human descriptive, but without necessarily being required by the web server - in What is a "slug" in Django? the slug is \'in-django-what-is-a-slug\', but the slug is not used to determine the page served (on this site at least)
回答7:
Slug is a URL friendly short label for specific content. It only contain Letters, Numbers, Underscores or Hyphens. Slugs are commonly save with the respective content and it pass as a URL string.
Slug can create using SlugField
Ex:
class Article(models.Model):
title = models.CharField(max_length=100)
slug = models.SlugField(max_length=100)
If you want to use title as slug, django has a simple function called slugify
from django.template.defaultfilters import slugify
class Article(models.Model):
title = models.CharField(max_length=100)
def slug(self):
return slugify(self.title)
If it needs uniqueness, add unique=True
in slug field.
for instance, from the previous example:
class Article(models.Model):
title = models.CharField(max_length=100)
slug = models.SlugField(max_length=100, unique=True)
Are you lazy to do slug process ? don\'t worry, this plugin will help you.
django-autoslug
回答8:
Also auto slug at django-admin. Added at ModelAdmin:
prepopulated_fields = {\'slug\': (\'title\', )}
As here:
class ArticleAdmin(admin.ModelAdmin):
list_display = (\'title\', \'slug\')
search_fields = (\'content\', )
prepopulated_fields = {\'slug\': (\'title\', )}
回答9:
slug
A short label for something, containing only letters, numbers, underscores or hyphens. They’re generally used in URLs. For example, in a typical blog entry URL:
https://www.djangoproject.com/weblog/2008/apr/12/spring/
the last bit (spring) is the slug.