2011-01-28 6 views
31


이 장고 템플릿에 URL 매개 변수를 전달하려고합니다 ...django 템플릿에서 문자열을 int로 변환해야합니다.

response = render_to_string('persistConTemplate.html', request.GET) 

내 views.py 파일의 호출 행입니다. persistConTemplate.html은 내 템플릿의 이름이고 request.GET는 url 매개 변수가 포함 된 사전입니다.

템플릿에서 나는 다음과 같은 매개 변수 중 하나를 사용하려고합니다.

{% for item in (numItems) %} 

    item {{item}} 

{% endfor %} 

numItems는 다음과 같이 요청하는 URL 매개 변수 중 하나입니다 ...

http:/someDomain/persistentConTest.html/?numItems=12 

위의 for 루프를 시도하면 다음과 같은 출력이 나옵니다.

image 1

예상대로 Word 이미지를보고 싶습니다. 12 시간 ...

이미지 1 이미지 2 이미지 3 이미지 4 이미지 5 이미지 6 이미지 7 이미지 8 이미지 9 이미지 10 이미지 11 이미지 12

아무도 내가 잘못하고있는 것을 말해 줄 수 있습니까? ?

+1

보기가 아닌 템플릿에서이 작업을 수행하는 특별한 이유가 있습니까? – bernie

+0

글쎄, 나는 전체 계층화 된 접근법을 따르려고했지만 다른 사람들이 이것을 처리 할 수있는 최적의 장소가보기에 있다고 제안했기 때문일 것입니다. – user479808

답변

5

예,이을위한 장소가보기에 있습니다.

위의 예제가 작동하지 않는다고 생각합니다. 정수를 반복 할 수 없습니다.

numItems = request.GET.get('numItems') 

if numItems: 
    numItems = range(1, int(numItems)+1) 

return direct_to_template(request, "mytemplate.html", {'numItems': numItems}) 


{% for item in numItems %} 
{{ item }} 
{% endfor %} 
+0

답장을 보내 주셔서 감사합니다.하지만 이렇게 해보면 같은 결과를 얻습니다 .... image 1 image 2 – user479808

+0

코드를 게시 할 수 있습니까? 이 코드는 작동합니다. 나는'range (1, int (numItems) +1)'이어야하는'range (1, int (range) +1)'을 작성한 약간의 실수를 알아 챘다. 어쨌든 'numItems'가 GET에 전달되면 1에서 numItems까지의 정수 목록을 만들고 템플릿에서 반복하십시오. –

+0

어디에 게시 할 지 모르므로 원래 게시물을 편집하여 거기에 추가합니다. ... – user479808

2

GET 매개 변수의 압축을 풀고 원하는 값으로 변환하려면보기에 일부 코드를 추가해야합니다. numItems이 정수인 경우에도 표시되는 구문은 원하는 결과를 제공하지 않습니다.

이 시도 :

ctx = dict(request.GET) 
ctx['numItems'] = int(ctx['numItems']) 
response = render_to_string('persistConTemplate.html', ctx) 
+0

답장을 보내 주셔서 감사합니다. 그러나 이것을 시도 할 때 다음과 같은 오류가 발생합니다. [ctx [ 'numObjects'] = int (ctx [ 'numObjects']) KeyError : 'numObjects' – user479808

+0

'if 'numObjects 'in ctx :' –

87

당신은 slugify

{{ some_int|slugify }} 

편집을 사용하여 str에 할 INT를 강요하는 추가 필터

{% for item in numItems|add:"0" %} 

https://docs.djangoproject.com/en/dev/ref/templates/builtins/#add

를 사용하는 int에 STR을 강요 할 수 있습니다 말했다 , 다른 사람들과 동의합니다. 일반적으로보기에서이 작업을 수행해야합니다.이 트릭은 alt 착취는 훨씬 더 심합니다.

+0

이것은 내가 필요로했던 대답이었다 - thanks : – simon

+0

고마워. 양식이있는 두통이 있습니다. 캐치는 "foreignkey"필드에 있습니다.DB에서로드 할 때 "양식. .value"에는 정수가 포함됩니다. 하지만 "양식. .value"를 제출하면 문자열입니다. TADÁ! – darkless

+0

대신 ids에 list comprehensions을 사용하면됩니다. 너무 간단합니다. – benzkji

14

나는 사용자 정의 필터를 만드는 것을 좋아 :

# templatetags/tag_library.py 

from django import template 

register = template.Library() 

@register.filter() 
def to_int(value): 
    return int(value) 

사용법 :

{% load tag_library %} 
{{ value|to_int }} 

그것은이 쉽게보기에서 수행 할 수없는 경우입니다.

+3

이것은 다른 답변들보다 깔끔합니다. –

0

내 솔루션 .. 나는 0.9와 비율을 비교하려면 템플릿에서

해킹의 친절하고 매우 구체적이며, 그것은 결코 1에 도달하지 않지만 모든 값이 템플릿에 문자열을 고려하고 있으며, 문자열을 실수로 변환 할 방법이 없습니다.내가 어떤 값이 0.8 이상이고 검색하도록하려면

{% if "0.9" in value %} 
... 
{% else %} 
... 
{% endif %} 

, 내가 수행해야합니다 :

{% if ("0.9" in value) or ("0.8" in value) %} 
... 
{% else %} 
... 
{% endif %} 

이 해킹이지만, 내 경우에는 충분

그래서 이런 짓을. 다른 사람들에게 도움이되기를 바랍니다.

관련 문제