2016-11-08 4 views
0

나는 url을 가지고 있으며 이것들은 괜찮은 것이지만 에러가 난다. NoReverseMatch django 앱의 URL에

내 URL입니다 :

<a {% if genre == view.genre %} class="active" href="{% url 'events' %}" title="{% trans 'Reset Filter' %}"{% else %} href="{% url 'genre' genre=genre.code %}"{% endif %}>{{ genre.name }}</a> 

내보기 :

class EventListView(PageContextMixin, ListView): 
    model = Booking 
    page_context_kwargs = {'selected': reverse_lazy('events')} 
    template_name = 'events/event_list.html' 

    def get_queryset(self): 
     filter_ = {'eventlist': True} # , 'season__in': settings.EVENTS_SEASONS} 
     self.rooms = settings.EVENTS_ROOMS 
     self.genres = list(settings.EVENTS_GENRES) 
     genre_names = dict([(g.evis_id, g.description_de) for g in Genre.objects.filter(evis_id__in=[g['evis_id'] for g in self.genres])]) 
     for genre in self.genres: 
      genre['name'] = genre_names.get(genre['evis_id'], genre['name']) 
     if 'genre' in self.kwargs: 
      self.genre = [g for g in self.genres 
          if g['url'] == self.kwargs['genre']][0] 
      filter_['eventgenre__genre__evis_id'] = self.genre['evis_id'] 
     elif 'room' in self.kwargs: 
      self.room = [r for r in self.rooms if r['url'] == self.kwargs['room']][0] 
      filter_['venue_description'] = self.room['venue_description'] 
     return self.model.objects.filter(**filter_) 
HTML 코드이 줄을

Reverse for 'genre' with arguments '()' and keyword arguments '{u'genre': ''}' not found. 0 pattern(s) tried: [] 

: 여기

url(r'^/(?P<genre>%s)$' % '|'.join([g.code for g in Genre.objects.all()]), EventListView.as_view(), name='genre'), 

는 오류 메시지입니다

HTML 템플릿 : 옵션과 같은 URL에 모든 장르를 넣어 시도

<div id="eventlistcontainer"> 
    {% if view.genres or view.rooms %} 
    <input type="checkbox" id="filteropener" class="hidden-input" /> 
    <div class="filterwrap"> 
     <label for="filteropener" class="filterlabel" title="{% trans "Toggle Filter" %}">{% trans "Filter" %}</label> 
     {% if view.genre or view.room %} 
     <span class="filtertag"> 
      : <b>{% if view.genre %}{{ view.genre.name }}{% else %}{{ view.room.name }}{% endif %}</b> 
     </span> 
     <a class="filterreset" href="{% url 'events' %}" title="{% trans 'Reset Filter' %}"> 
      <img src="{{ STATIC_URL }}images/icon_close.png" alt="{% trans 'Reset Filter' %}" /> 
     </a> 
     {% endif %} 
    </div> 
    <div class="eventfilter"> 
     <div> 
      <h2>{% trans "Genre" %}</h2> 
      <ul class="linklist list1"> 
      {% for genre in view.genres %} 
       <li> 
       <a {% if genre == view.genre %} class="active" href="{% url 'events' %}" title="{% trans 'Reset Filter' %}"{% else %} href="{% url 'genre' genre=genre.code %}"{% endif %}>{{ genre.name }}</a> 
       </li> 
      {% if forloop.counter == 4 %} 
      </ul> 
      <ul class="linklist list2"> 
      {% endif %} 
      {% endfor %} 
      </ul> 
     </div> 
     <div> 
      <h2>{% trans "Concert Venues" %}</h2> 
      <ul class="linklist list3"> 
      {% for room in view.rooms %} 
       <li> 
       <a {% if room == view.room %} class="active" href="{% url 'events' %}" title="{% trans "Reset Filter" %}"{% else %} href="{% url "room" room=room.url %}"{% endif %}>{{ room.name }}</a> 
       </li> 
      {% if forloop.counter == 6 %} 
      </ul> 
      <ul class="linklist list4"> 
      {% endif %} 
      {% endfor %} 
      </ul> 
     </div> 
    </div> 
    {% endif %} 

    {% with object_list|sort_by_highlight_past as events %} 
    <ul class="eventlist{% if events.0.past %} past{% endif %}"> 
     {% for event in events %} 
     {% ifchanged event.past %} 
     {% if not forloop.first %} 
    </ul> 
    <h3>Vergangene Veranstaltungen</h3> 
    <ul class="eventlist past"> 
     {% endif %} 
     {% endifchanged %} 
     <li class="{{ event.status|default:"" }}{% if forloop.first and not event.past %} wide{% endif %}"> 
      {% for im in event.eventimage_set.all|slice:":1" %} 
      <a href="{{ event.get_absolute_url }}" class="image"> 
       {% if forloop.parentloop.first and not event.past %} 
       <img src="{{ im.image.image.3.url }}" alt="{{ im.text }}" /> 
       {% endif %} 
       <img src="{{ im.image.image.2.url }}" alt="{{ im.text }}" /> 
      </a> 
      {% endfor %} 
      <div class="textbox"> 
       <a href="{{ event.get_absolute_url }}"> 
        <p class="date">{{ event.start|fancy_date }}</p> 
        <h2>{{ event.name }}</h2> 
        <p class="location">{{ event.venue_description }}</p> 
       </a> 
       {% if event.description_short %} 
       <p class="additional-info">{{ event.description_short }}</p> 
       {% endif %} 
       <a href="{{ event.get_absolute_url }}" class="button">{% trans "Details" %}</a> 
       {% if event.status %} 
       <p class="status">{% trans event.status %}!</p> 
       {% elif event.selling_status_code == "EF" %} 
       <a href="{{ event.get_absolute_url }}" class="button">{{ event.selling_status_description }}</a> 
       {% elif event|ticket_link %} 
       <a href="{{ event|ticket_link }}" class="button">{% trans "Tickets" %}</a> 
       {% endif %} 
      </div> 
     </li> 
     {% endfor %} 
    </ul> 
    {% endwith %} 
</div> 

장르

EVENTS_GENRES = (
    { 
     'url': 'orchestermusik', 
     'evis_id': '1', 
     'name': 'Orchestermusik' 
    }, 
    { 
     'url': 'vokale-musik', 
     'evis_id': '2', 
     'name': 'Vokale Musik' 
    },) 
+0

인수 '()'및 키워드 인수 '{}'가없는 '*'에 대해서는 [참조] (http://stackoverflow.com/questions/1842389/reverse-for-with-arguments-and-keyword)를 참조하십시오. -arguments-not-found), 힌트를 줄 수도 있습니다. –

답변

1

은 아주 나쁜 생각이다. 다른 것들과 별개로 쿼리는 한 번만 평가되므로 URL은 서버 시작시 이미 생성 된 Genres 만 받아들입니다.

대신보기에서 확인하는 항목이며 get_object_or_404과 같습니다. 장르가 존재하지 않는다면 404와 똑같은 결과를 얻는다.

그러나이 특별한 경우에는 태그로 전달하는 genre.code의 값이 어떤 이유로 비어 있기 때문에 오류가 발생합니다. 템플릿이나 뷰의 나머지 부분을 보지 않고도 그 이유를 알 수는 없습니다.

+0

내 의견을 추가했습니다. –

+0

아니요,보기의 일부분을 추가했으며 나머지 템플릿도 게시하지 않았습니다. –

+0

이제 완료 @ 다니엘 –