2013-02-19 6 views
0

Я делаю аппликацию в django и im totaly new для языка python и рамки django.Создайте url в django

Моя проблема в том, что я не могу понять, как получить этот URL:

project/2/ticket/1 

Im в project/2 и получил ссылку в шаблоне, что ссылки на project/2/ticket/1. Ошибка я получаю NoReverseMatch at /project/1 и код им с помощью является:

url.py

urlpatterns = patterns('', 

# Project urls below 
url(r'^project/(?P<project_id>\d+)$', 'project_manager.views.project_list', name='project_list_with_ticket'), 
url(r'^project/(?P<project_id>\d+)/ticket/(?P<ticket_id>\d+)$', 'project_manager.views.ticket_list', name='ticket_list'), 

# Uncomment the next line to enable the admin: 
url(r'^admin/', include(admin.site.urls)), 

)

views.py

def ticket_list(request, ticket_id = None): 

if ticket_id: 

    tickets = get_list_or_404(Ticket.objects.filter(id = ticket_id)) 

    return render(request, 'tickets/details.html', {"tickets" : tickets }) 

else: 

    return render(request, 'projects/list.html', {'projects' : projects }) 

мой шаблон

{% for ticket in tickets %} 
    <div class="tickets"> 
     <a href="{% url ticket_list ticket.id %}">{{ ticket }}</a> 
    </div> 
{% endfor %} 

EDIT - Он говорит, что нет ticket_list, но есть?

ответ

3

Вы вызываете URL-адрес ticket_list с одной переменной - ticket.id - когда требуется два.

Шаблон:

<a href="{% url ticket_list ticket.id %}">{{ ticket }}</a>

Вы пропускание ticket.id, и это также требует project.id, как вы можете видеть в вашей URL:

url(r'^project/(?P<project_id>\d+)/ticket/(?P<ticket_id>\d+)$', 'project_manager.views.ticket_list', name='ticket_list'),

Вы должны изменить свой шаблон для передачи обеих переменных, которые вы запрашиваете в URL-адресе. Вы не писали, как вы получите идентификатор проекта, так что мой код будет, вероятно, не работает точно так, как писал, но вам нужно что-то вроде этого:

<a href="{% url ticket_list ticket.project.id ticket.id %}">{{ ticket }}</a>

Порядка, в котором переменные передаются необходимость согласования с как они запрашиваются в вашем URL-адресе. Поскольку ваш URL запрашивает project_id, а затем ticket_id, убедитесь, что вы передали их в своем шаблоне в указанном выше порядке.

+0

Спасибо, работает отлично! : D Сделайте это anwser как можно скорее – Rovdjuret

Смежные вопросы