2012-02-16 2 views
0

설정 파일에서 프랑스어로 django 웹 사이트를 설정했습니다.Django 날짜 변환 템플릿 및 URLconf

내 템플릿에 다음 항목이 있습니다. <a href="/{{ year }}/{{ month|date:"b" }}/">{{ month|date:"F" }}</a>. 내 URLconf에서

, 나는 항목 url(r'^(?P<year>\d{4})/(?P<month>\w{3})/(?P<day>\d{1,2})/$',MonthArchivePostView.as_view())

문제는 템플릿에서 생성 된 날짜 (예 : 월, 나는이 <a href="/2012/fév/">Février</a>있어) 프랑스어 때문이다 가지고 있지만 URL은 영어 기대 버전 (/2012/feb/).

영어 또는 프랑스어로 URL에 날짜를 쓰는 것에 신경 쓰지 않아도 템플릿을 사용하여 생성 된 URL을 URLconf 파일에 포함시켜야합니다.


업데이트 빠른 수정 -하지 - 정말-A-솔루션 주셔서 감사합니다 : 그래서 urls.py 대신 /feb/

/02/을 대신 b의 모든 곳에서 m 형식을 사용

url(r'^(?P<year>\d{4})/(?P<month>\d{1,2})/$', 
    MonthArchivePostView.as_view() 
), 

와 일반 뷰에서

class MonthArchivePostView(dates.MonthArchiveView): 
    model = Post 
    month_format = '%m' 
    date_field = 'publish' 

답변

1

@jkbr이 이미 말했듯이, unlocalize가 작업을 수행해야합니다.

게다가, 템플릿에 URL을 정의하는 대신 입력 모델의 모델 정의에 'get_absolute_url(self)' 함수를 추가하는 것에 대해 생각해 보셨습니까?

분리 된 콘텐츠 정의 (모델)를 콘텐츠 프리젠 테이션 (템플릿)으로 유지하는 것이 좋습니다.

또한 문제 해결에 도움이 될 수 있습니다.

에 한번 당신의 엔트리 모델의 끝에, 이것과 같은 기능 추가 :

def get_absolute_url(self): 
    from time import strftime 
    return "%s%s" % (settings.SITE_URL,strftime("%Y/%b/",self.creation_date)) 

이 내가 제대로 이해 한 경우,이 데이터를 표시하는 대신에 그것을 구문 분석에 대해 뭔가로,의 (작동합니다을 "B"``m : | 날짜

<a href="{{entry.get_absolute_url}}">{{ month|date:"F" }}</a> 
+0

고맙습니다.하지만 어떻게해야할지 모르겠습니다. 제네릭 클래스 (cf 업데이트)를 사용하기 때문에 실제로 월별 아카이브에 대한 모델이 없습니다. 나는 모델 포스트를 사용한다. 여기서 [get_absolute_url] 함수를 설명했다. [here] (https://docs.djangoproject.com/en/dev/ref/models/instances/#django.db.models.permalink) –

+0

generic 클래스 view [returns] (https://docs.djangoproject.com/en/dev/ref/class-based-views/#django.views.generic.dates.YearArchiveView)는 DateQuerySet과 연도, 모델이 없습니다. 더 쉽고 빠르지 만 일반 클래스를 사용하고 있었지만 더 이상 확실하지 않습니다. 또한 get_absolute_url [must] (https://docs.djangoproject.com/ko/1.3/ref/models/instances/#django.db.models.Model.get_absolute_url)에는 아스키 문자 만 있으므로'/ 2012/Feb/'/ 2012/fév /'가 아닙니다. 아니면 '/ 2012/f % C3 % A9v /'하지만 그다지 좋지는 않습니다 ... –

+1

URL에 슬러그를 사용하고 비 ASCII 문자는 사용하지 않는 것이 좋습니다. 템플릿 태그 [slugify] (https://docs.djangoproject.com/en/1.3/ref/templates/builtins/#slugify)는 앞서 언급 한'django.template.defaultfilters'에서'slugify'를 가져 오는 모델 정의에서도 사용할 수 있습니다 [여기] (http://stackoverflow.com/a/837835/302076) – dolma33

3

unlocalize을 사용하면 템플릿의 현지화를 방지 할 수 있습니다.

+0

가 어떻게'달과 결합 않은 : 당신이 뭔가를 할 수있는 장고 문서의 Format localization 절에서 설명한 다음

을 템플릿에. onh | unlocalize | date : "b"'빈 문자열을 출력하고'month | date : "b"| unlocalize'는 효과가 없습니다 (여전히 프랑스어로) –

+0

다음과 같이 해보십시오 :'{% localize off %} {{month 날짜 : "b"}} {% endlocalize %}' –

+0

이상하게도'{% localize off %}'는'{{month}} '에만 영향을 미치지 않습니다. 반면,'{{month | unlocalize}}'는 작동합니다 (올바른 형식이 아님). 어쩌면 버그 –