2012-08-07 2 views
0

URL을 참조하기 위해 슬러그를 사용하고 싶습니다. 그럼에도 불구하고, 내가 사용하고자하는 모델은 중국어 어휘 퀴즈를위한 디자인이며, URL을 나타 내기 위해 3 가지 다른 민달팽이를 사용하고 싶습니다. 그런 다음Django에서 한 모델에 둘 이상의 슬러그 필드를 사용할 수 있습니까?

, 나는

그리고 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}) 
에 대한 전망이 모델을 가지고

추가 itionally, 내가 해당 템플릿을 생성하고 난 URL을

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

그리고 다른 2에 액세스 할 수 있습니다

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 파일

urls.py를 가지고, 나는 오류가 발생 말하는

아니 어휘 주어진 검색어와 일치합니다.

장고는 모델 용 슬러그 필드 하나만 지원합니까?

장고가 하나 이상의 슬러그 필드를 지원한다면, 나는 무엇을 놓치고 있습니까?

+1

아마 쿼리입니다. Dagango는 슬러그 필드의 양을 제한하지 않습니다. –

답변

0

왜 다른 디렉토리를 가리 키지 않습니까?

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} 
+0

좋은 아이디어. 시도해 볼게. 가장 빠른 솔루션일지도 모릅니다. 하나 이상의 슬러그를 사용할 수 있습니까? – guillemhs

+0

나는 왜 안 보이지. https://docs.djangoproject.com/ko/1.4/ref/models/fields/#slugfield에는 그러한 제한이 없습니다. – darkphoenix

+0

얘들 아, 작동 해. 도와 주셔서 감사 드리며 그 중요한 지원을 제공하십시오. – guillemhs

관련 문제