2017-12-28 4 views
-1

링크로 존재한다면 가치있는 것을 만들고 싶습니다. 어떤 경우에는 값이 없음이되며 어떤 경우에는 사용자가 클릭 할 수 있어야하는 레코드가 있습니다. 템플릿 안의 if 문 내부의 링크에 NoReverseMatch를 극복하는 방법은 무엇입니까?

그래서 내 템플릿에, 나는 if 문

{% if expense_row.noteextra.extra.id %} <a href="{% url 
'extra_notes_details' pk=expense_row.noteextra.extra.id %}" class="btn 
btn-info">{{ expense_row.noteextra}}</a> 
        {% else %} 
        {{ expense_row.noteextra}} 

       {% endif %} 

안에 넣어하지만 if 문에도 불구하고 여전히 오류 얻을

NoReverseMatch/비용/목록/거리에서/

Reverse for 'extra_notes_details' with arguments '()' and keyword arguments '{u'pk': ''}' not found. 1 pattern(s) tried: ['unit/extra_notes_details/(?P<pk>\\d+)$'] 

즉, 초기 상태에서 장고 템플릿이 URL에 대해 구문 분석되고 있음을 의미합니다. e와 그것 은 비 작동 URL이 if 문 안에 있거나 주석으로 처리되었다하더라도 오류를 그냥 내 버릴지는 신경 쓰지 않습니다.

어떻게 이러한 오류가 발생하지 않고 가끔 링크를 만들 수 있습니까?

def unit_url(self): 
    unit_id = getattr(self.noteunit.unit, 'id', None) 
    if unit_id: 
     return reverse('extra_notes_details', kwargs={'pk': unit_id}) 

및 템플릿에 사용 :

+0

템플릿이 오류에서'extra_notes_details' 일치하지 않는'unit_notes_details'를 사용합니다. 오류는 다른 곳에서 발생합니다. – Alasdair

+0

예, 제 질문에 다른 샘플을 사용했습니다. 고쳤다 . –

+0

이전 답변이 내 문제를 해결했지만 어떤 이유로 든 삭제되었습니다. –

답변

1

봅니다 모델에 메소드를 추가하는

{% if expense_row.unit_url %} 
    {{ expense_row.unit_url }} 
{% else %} 
    {{ expense_row.noteunit}} 
{% endif %} 
1

{% url %} 태그는 변수에 결과를 할당 할 수 있습니다. 이 은 URL을 역 분개하지 못하면에 오류가 발생하지 않습니다.

{% url 'extra_notes_details' pk=expense_row.noteextra.extra.id as the_url %}" 

{% if the_url %} 
    <a href="{{ the_url }}" class="btn btn-info">{{ expense_row.noteextra}}</a> 
{% else %} 
    {{ expense_row.noteextra}} 
{% endif %}