python Django 重复 url 多次
python Django repeat url many times
我是 Django1.10 的初学者。我刚开始玩它。我正在尝试在网站上显示图片。
这是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/app/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/app/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/app/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/app/templates/app/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 %}
如果我运行pythonmanage.py运行服务器,然后去http://127.0.0.1:8000/poster/。我可以看到我之前创建的一个对象,当我单击它时,它指向的 url 会重复多次
我相信 url.py 中有问题,但我不确定。有人可以帮忙吗?
您是否检查过 URL 在生成的 HTML 代码中的外观?例如。加载 HTML 时 URL 看起来正确吗?当您单击它时,它会开始重复吗?
首先我认为你在你的 models.py
线上缺少一个 forwardshals :
info_image = models.ImageField(upload_to='images/%Y%m/%d')
除非是你的本意,否则我认为应该是这样的:
info_image = models.ImageField(upload_to='images/%Y/%m/%d')
^
接下来是您没有在 index.html
模板的 <a>
标签中为 href
属性提供正确的 url。
{{forloop.counter}}.<a href="{{ item.info_image.url }}/">{{ item.info_text }}</a>
此行将指向图像本身。因此,您可以在 <image src="{{ item.info_image.url }}" />
中使用它的示例,但不能在 link 标记中使用它。所以我想这就是您要找的东西。
要指向特定图像的 detail
视图,您最好在 Info
模型 class.
上创建 get_absolute_url
方法
Define a get_absolute_url() method to tell Django how to calculate the canonical URL for an object. To callers, this method should appear to return a string that can be used to refer to the object over 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 }}" />
我是 Django1.10 的初学者。我刚开始玩它。我正在尝试在网站上显示图片。
这是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/app/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/app/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/app/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/app/templates/app/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 %}
如果我运行pythonmanage.py运行服务器,然后去http://127.0.0.1:8000/poster/。我可以看到我之前创建的一个对象,当我单击它时,它指向的 url 会重复多次
我相信 url.py 中有问题,但我不确定。有人可以帮忙吗?
您是否检查过 URL 在生成的 HTML 代码中的外观?例如。加载 HTML 时 URL 看起来正确吗?当您单击它时,它会开始重复吗?
首先我认为你在你的 models.py
线上缺少一个 forwardshals :
info_image = models.ImageField(upload_to='images/%Y%m/%d')
除非是你的本意,否则我认为应该是这样的:
info_image = models.ImageField(upload_to='images/%Y/%m/%d')
^
接下来是您没有在 index.html
模板的 <a>
标签中为 href
属性提供正确的 url。
{{forloop.counter}}.<a href="{{ item.info_image.url }}/">{{ item.info_text }}</a>
此行将指向图像本身。因此,您可以在 <image src="{{ item.info_image.url }}" />
中使用它的示例,但不能在 link 标记中使用它。所以我想这就是您要找的东西。
要指向特定图像的 detail
视图,您最好在 Info
模型 class.
get_absolute_url
方法
Define a get_absolute_url() method to tell Django how to calculate the canonical URL for an object. To callers, this method should appear to return a string that can be used to refer to the object over 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 }}" />