繁体   English   中英

我可以在Django上的模型中使用多个Slug字段吗?

[英]Can I use more than one slug field for a model on Django?

我想使用一个slug来引用一个URL。 尽管如此,我要使用的模型是针对中文词汇测验设计的,并且我想使用3种不同的词条来引用URL。

那我有一个模特

models.py

from django.db import models
from django.db.models import permalink
from django.template.defaultfilters import slugify
from unidecode import unidecode

class Vocabulary( models.Model ):

title = models.CharField(" Title ",  max_length = 100 )
vocabularyCharacter = models.CharField("Character",  max_length = 100, blank = True, null = True )
vocabularyTranslation = models.CharField("Translation",  max_length = 100, blank = True, null = True )
vocabularyPinyin = models.CharField("Pinyin",  max_length = 100, blank = True, null = True )
vocabularyCharacterSlug = models.SlugField( "Character Slug (optional)",  max_length = 100, blank = True, null = True )
vocabularyTranslationSlug = models.SlugField("Translation Slug (optional)",  max_length = 100, blank = True, null = True )
vocabularyPinyinSlug = models.SlugField("Pinyin Slug (optional)",  max_length = 100, blank = True, null = True )
audio_file = models.FileField("Audio file (optional)", upload_to = u'resources/mp3/', max_length=200, blank = True, null=True)
description = models.TextField("Description ",  blank = True, null = True )

class Meta:
    verbose_name = 'vocabulary'
    verbose_name_plural = 'vocabularies'

def __unicode__( self ):
    return u"%s" % self.title

def save( self, force_insert = False, force_update = False ):
    self.vocabularyCharacterSlug = slugify(unidecode(self.vocabularyCharacter))
    self.vocabularyTranslationSlug = slugify(unidecode(self.vocabularyTranslation))
    self.vocabularyPinyinSlug = slugify(unidecode(self.vocabularyPinyin))
    super( Vocabulary, self ).save( force_insert, force_update )

@permalink
def get_absolute_vocabulary_character_url( self ):
    return ( 'vocabulary_character_detail', None, {
        'vocabularyCharacterSlug':    self.vocabularyCharacterSlug,
    } )

@permalink
def get_absolute_vocabulary_traslation_url( self ):
    return ( 'vocabulary_traslation_detail', None, {
        'vocabularyTranslationSlug':    self.vocabularyTranslationSlug,
    } )

@permalink
def get_absolute_vocabulary_pinyin_url( self ):
    return ( 'vocabulary_pinyin_detail', None, {
        'vocabularyPinyinSlug':    self.vocabularyPinyinSlug,
    } )

然后,我对此模型有一个看法

view.py

from django.shortcuts import get_object_or_404, render_to_response
from core.vocabulary.models import Vocabulary

def vocabulary_character_detail( request, vocabularyCharacterSlug ):

    vocabulary = get_object_or_404( Vocabulary, vocabularyCharacterSlug = vocabularyCharacterSlug )
    return render_to_response( 'vocabulary/vocabulary_character_detail.html',
                              {'vocabulary': vocabulary} )

def vocabulary_translation_detail( request, vocabularyTranslationSlug ):

    vocabulary = get_object_or_404( Vocabulary, vocabularyTranslationSlug = vocabularyTranslationSlug )
    return render_to_response( 'vocabulary/vocabulary_translation_detail.html',
                              {'vocabulary': vocabulary} )

def vocabulary_pinyin_detail( request, vocabularyPinyinSlug ):

    vocabulary = get_object_or_404( Vocabulary, vocabularyPinyinSlug = vocabularyPinyinSlug )
    return render_to_response( 'vocabulary/vocabulary_pinyin_detail.html',
                              {'vocabulary': vocabulary} )

另外,我有这个网址文件

urls.py

from django.conf.urls import patterns, url
from core.vocabulary.views.vocabulary import vocabulary_character_detail
from core.vocabulary.views.vocabulary import vocabulary_translation_detail, vocabulary_pinyin_detail

urlpatterns = patterns( '',     
        url( r'^(?P<vocabularyCharacterSlug>[-\w]+)/$',
            vocabulary_character_detail,
            name = 'vocabulary_character' ),

        url( r'^(?P<vocabularyTranslationSlug>[-\w]+)/$',
            vocabulary_translation_detail,
            name = 'vocabulary_translation' ),

        url( r'^(?P<vocabularyPinyinSlug>[-\w]+)/$',
            vocabulary_pinyin_detail,
            name = 'vocabulary_pinyin' ),
 )

我创建了相应的模板,我可以访问网址

url( r'^(?P<vocabularyCharacterSlug>[-\w]+)/$',
            vocabulary_character_detail,
            name = 'vocabulary_character' ),

而另外2个,我收到一条错误消息,说

没有词汇匹配给定的查询。

Django是否仅支持模型的一个lug字段?

如果Django支持多个子弹字段,我会缺少什么?

为什么不将您的视图指向其他目录?

urlpatterns = patterns( '',     
    url( r'^character/(?P<vocabularyCharacterSlug>[-\w]+)/$',
        vocabulary_character_detail,
        name = 'vocabulary_character' ),

    url( r'^translation/(?P<vocabularyTranslationSlug>[-\w]+)/$',
        vocabulary_translation_detail,
        name = 'vocabulary_translation' ),

    url( r'^pinyin/(?P<vocabularyPinyinSlug>[-\w]+)/$',
        vocabulary_pinyin_detail,
        name = 'vocabulary_pinyin' ),

模型:

def vocabulary_character_detail( request, vocabularyCharacterSlug ):

   vocabulary = get_object_or_404( Vocabulary, vocabularyCharacterSlug = vocabularyCharacterSlug )
   return render_to_response( 'vocabulary/character/vocabulary_character_detail.html',
                          {'vocabulary': vocabulary} )

def vocabulary_translation_detail( request, vocabularyTranslationSlug ):

   vocabulary = get_object_or_404( Vocabulary, vocabularyTranslationSlug = vocabularyTranslationSlug )
   return render_to_response( 'vocabulary/translation/vocabulary_translation_detail.html',
                          {'vocabulary': vocabulary} )

def vocabulary_pinyin_detail( request, vocabularyPinyinSlug ):

   vocabulary = get_object_or_404( Vocabulary, vocabularyPinyinSlug = vocabularyPinyinSlug )
   return render_to_response( 'vocabulary/pinyin/vocabulary_pinyin_detail.html',
                          {'vocabulary': vocabulary} 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM