2016-12-10 3 views
0

Я хочу использовать тот же шаблон для просмотра информации о каждом из объектов моей базы данных. Я хотел бы иметь возможность щелкнуть каждый элемент в списке и связать его со страницей с информацией об этом. Я думаю, что есть более простой способ, чем просмотр каждого уникального объекта.Django: Передача объекта из шаблона в представления

я перечисляю все мои объекты базы данных на моих list.html так:

{% for instance in object_info %} 
    <li><a href="object">{{ instance.name }}</a></li> 
{% endfor %} 

Мой views.py имеет вид:

def object_view(request): 
    data = Object.objects.filter(name="") 
    context={ 
    'object_info':data 
    } 
    return render(request, "object.html", context) 

Могу ли я передать каждый {{ instance.name }} к просматривать и использовать это как переменную для моего фильтра?

ответ

2

Хорошо первый прочь никогда не сделать это:

data = Object.objects.filter(name="") 

Django имеет all() функцию, которая будет возвращать все объекты:

data = Object.objects.all() 

Во-вторых, я надеюсь, object_view, data, object_info, object.html не Ваш, имена реальных переменных! Если да, убедитесь, что они имеют смысл для вашей заявки.

Хорошо, вернемся к вашей проблеме. Ну, вам не нужно делать вид для каждого отдельного объекта. Я предполагаю, что <a href="object">...</a> должен ссылаться на новую страницу, которая будет заполнена выбранным объектом.

Если да, вы хотели бы иметь URL-адреса в тегах <a>: /objects/object_id/.

Этот новый URL должен быть определен, как это в urls.py:

urlpatterns += [ 
    url(r'^objects/(?P<oid>[0-9]+)/$', views.object_specific_view, name='objects'), 
] 

Обратите внимание на oid URL-адрес аргумента. Мы будем использовать его для доступа к нашему конкретному объекту.

Теперь ваш оригинальный шаблон, list.html, должен выглядеть следующим образом:

{% for instance in object_info %} 
     <li><a href="{% url 'objects' oid = instance.id %}">instance.name</a></li> 
    {% endfor %} 

Где мы поставляем instance.id в oid URL-адрес аргумента, чтобы создать нечто вроде objects/1/ или objects/2/ т.д.

Теперь, это означает, что вы будете нужно только создать еще один вид с другим шаблоном.

Ваш второй вид object_specific_view:

def object_specific_view(request, oid): # The url argument oid is automatically supplied by Django as we defined it carefully in our urls.py 
    object = Object.objects.filter(id=oid).first() 
    context={ 
     'object':object 
    } 
    return render(request, "specific_object.html", context) 

Теперь вам просто нужно создать свой specific_object.html и получить доступ к экземпляру object, чтобы показать детали конкретного объекта :).

+0

Он делает то, что я хочу сейчас, спасибо! – tchane

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