2016-08-10 4 views
0

Я начинаю Django1.10. Я только начал играть с ним. Я пытаюсь показать изображение на веб-сайте.python Django повтор url много раз

Это MyProject/settings.py:

MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 
MEDIA_URL = '/media/' 

и MyProject/urls.py

from django.conf.urls import url, include 
from django.contrib import admin 
from django.conf import settings 
from django.conf.urls.static import static 
urlpatterns = [ 
    url(r'^poster/', include('poster.urls')), 
    url(r'^admin/', admin.site.urls), 
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 

MyProject/приложение/views.py

from django.shortcuts import render 
from django.http import HttpResponse 
from .models import Info 
# give a set of summary of items 
def index(request): 
    latest_item_list = Info.objects.all() 
    context = {'latest_item_list': latest_item_list} 
    return render(request, 'poster/index.html', context) 
def detail(request, item_id): 

    return HttpResponse("This function will return detail info for items %s" % item_id) 

MyProject/приложение/models.py

from django.db import models 

class Info(models.Model): 
    def __str__(self): 
     return self.info_text 
    info_text = models.CharField(max_length=50) 
    pub_date = models.DateTimeField('date published') 
    info_image = models.ImageField(upload_to='images/%Y%m/%d') 

MyProject/приложение/urls.py

from django.conf.urls import url 
from . import views 

urlpatterns = [ 
    # ex:/poster 
    url(r'^$', views.index, name='index'), 
    # ex: /poster/5 
    url(r'^(?P<item_id>[0-9]+)/$', views.detail, name = 'detail'), 
] 

MyProject/приложение/шаблоны/приложение/index.html

{% if latest_item_list %} 
    <ul> 
    {% for item in latest_item_list %} 
     {{forloop.counter}}.<a href="{{ item.info_image.url }}/">{{ item.info_text }}</a> 
    {% endfor %} 
    </ul> 
{% else %} 
    <p>No poster are available.</p> 
{% endif %} 

Если я бегу питона manage.py runserver и иди http://127.0.0.1:8000/poster/. Я вижу один объект, который я создал ранее, когда я нажимаю его, URL указывает, что он повторяется много раз enter image description here

Я считаю, что в url.py есть что-то не так, но я не уверен. Может кто-нибудь помочь?

ответ

1

Прежде всего, я думаю, вам не хватает forwardshals в вашем models.py на линии:

info_image = models.ImageField(upload_to='images/%Y%m/%d') 

Если это не ваше намерение, я думаю, что это должно быть так:

info_image = models.ImageField(upload_to='images/%Y/%m/%d') 
               ^

Следующая вещь что вы не предоставляете правильный url для атрибута href в теге <a> вашего шаблона index.html.

{{forloop.counter}}.<a href="{{ item.info_image.url }}/">{{ item.info_text }}</a> 

Эта строка укажет на изображение. Поэтому вы можете использовать этот пример в <image src="{{ item.info_image.url }}" />, но не в теге ссылки. Поэтому я предполагаю, что это то, что вы искали.

Чтобы указать на ваш detail вид определенного изображения, вы хотели бы идеально создать метод get_absolute_url на вашем Info модельного класса.

Model.get_absolute_url()

Определите метод get_absolute_url(), чтобы сообщить Django, как вычислить канонический URL для объекта. Для вызывающих абонентов этот метод должен возвращать строку, которая может использоваться для ссылки на объект через HTTP.

Например:

# models.py 
class Info(models.Model): 
    ... 
    info_image = models.ImageField(upload_to='images/%Y%m/%d') 

    def get_absolute_url(self): 
     return reverse('detail', 
         args=[self.id]) 

Тогда вы могли бы использовать, что в шаблоне так:

{{forloop.counter}}.<a href="{{ item.get_absolute_url }}">{{ item.info_text }}</a> 

и отображать изображение, где бы вы хотите, используя:

<image src="{{ item.info_image.url }}" /> 
0

Вы проверили, как выглядит URL-адрес в сгенерированном HTML-коде? Например. правильно ли URL выглядит корректно при загрузке HTML, и когда вы нажимаете на него, он начинает его повторять?

+0

HTML отлично работает, я попробовал вручную ввести значение item.info_image.url. Пока он ударяет по этому URL-адресу, URL-адрес начинает повторяться. –

+0

Можете ли вы опубликовать URL-адрес, который у вас есть в HTML? –

+0

Если я посмотрю ваш комментарий в urls.py, он говорит: '# ex:/poster/5 url (r '^ (? P [0-9] +)/$', views.detail, name = 'detail'), ' , чтобы достичь того, что в комментарии должно было бы выглядеть (обратите внимание на/infront) ' url (r '^/(? P [0-9] +)/$', views .detail, name = 'detail'), ' Хотя из URL-адреса вам кажется, что ваш URL-адрес нуждается в чем-то вроде ' url (r '^/images/$', views.detail, name = 'detail'), ' чтобы иметь возможность связывать изображения. Хотя я бы порекомендовал вам хранить изображения с идентификатором типа в модели, поэтому вы можете использовать '{% url 'detail' question.id%}' нотацию для создания URL-адресов. –

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

  • Нет связанных вопросов^_^