在Django中显示图像 - 设置urls.py

时间:2017-09-10 17:56:29

标签: python django django-urls

如果这是重复,我道歉。我一直在网上搜索并尝试了多种解决方案。我已经构建了一个图像上传器,将图像上传到正确的位置但是,我想我的urls.py中有一些东西让我无法显示图像。

评论的线条是我的尝试,但我没有运气。 urls.py:

from django.conf.urls import url
from . import views
from django.conf import settings
from django.conf.urls.static import static
app_name = 'orders'
urlpatterns = [
url(r'^$',views.index,name='index'),
url(r'^invoice/$', views.invoice, name='invoice'),

url(r'^photo/$', views.UploadView.as_view()),
#static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT),
#static(r'^media/', document_root=settings.MEDIA_ROOT),
#url("^media/(?P<path>.*)$","django.views.static.serve",{"document_root": settings.MEDIA_ROOT}),


url(r'^catalog/$', views.catalog, name='catalog'),
url(r'^postStampsShipments/$', views.postStampsShipments, name='postStampsShipments'),
url(r'^catalog/(?P<SKU>[^/]+)/$', views.catalogDetail, name='catalogDetail'),
url(r'^catalogchange/(?P<SKU>[^/]+)/$', views.catalogChange, name='catalogChange'),
url(r'^updateOSTKCat/$', views.updateCatalogOSTK, name='OSTKCat'),

url(r'^items/$', views.item, name='items'),
url(r'^items/(?P<SKU>[^/]+)/$', views.itemDetail, name='itemDetail'),

url(r'^inventory/$', views.inventory, name='inventory'),
url(r'^inventoryChange/$', views.inventoryChange, name = 'inventoryChange'),

url(r'^test/$', views.test, name='test'),
url(r'^genBarcode/$', views.genBarcode, name='genBarcode'),
url(r'^barcode/$', views.barcode, name='barcode'),

url(r'^(?P<retailOrderNumber>[^/]+)/', views.orderDetail,name = 'Detail'),
url(r'^(?P<retailOrderNumber>[^/]+)/shipments/', views.shipments, name='shipments'),]

查看:

def itemDetail(request,SKU):
    edit = request.GET.get('edit','')
    itm = Item.objects.filter(SKU=SKU)[0]
    vendors = Vendor.objects.all()
    cat = Category.objects.all()
    template = loader.get_template('orders/itemDetail.html')
    context = {
        'itemDetail':itm,'SKU':SKU,'edit':edit,'vendors':vendors,'cat':cat
    }
return HttpResponse(template.render(context, request))

settings.py:

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

模板中的代码:

               <td>{% load static %}
                   {{ img.image.url }}
                   <img src="{{ img.image.url }}">
               </td>

我看到的常见错误:

Unhandled exception in thread started by <function wrapper at 0x0366AAB0>
Traceback (most recent call last):
  File "C:\Program Files (x86)\Anaconda2\lib\site-packages\django\utils\autoreload.py", line 226, in wrapper
    fn(*args, **kwargs)
  File "C:\Program Files (x86)\Anaconda2\lib\site-packages\django\core\management\commands\runserver.py", line 121, in inner_run
    self.check(display_num_errors=True)
  File "C:\Program Files (x86)\Anaconda2\lib\site-packages\django\core\management\base.py", line 374, in check
    include_deployment_checks=include_deployment_checks,
  File "C:\Program Files (x86)\Anaconda2\lib\site-packages\django\core\management\base.py", line 361, in _run_checks
    return checks.run_checks(**kwargs)
  File "C:\Program Files (x86)\Anaconda2\lib\site-packages\django\core\checks\registry.py", line 81, in run_checks
    new_errors = check(app_configs=app_configs)
  File "C:\Program Files (x86)\Anaconda2\lib\site-packages\django\core\checks\urls.py", line 14, in check_url_config
    return check_resolver(resolver)
  File "C:\Program Files (x86)\Anaconda2\lib\site-packages\django\core\checks\urls.py", line 24, in check_resolver
    for pattern in resolver.url_patterns:
  File "C:\Program Files (x86)\Anaconda2\lib\site-packages\django\utils\functional.py", line 35, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "C:\Program Files (x86)\Anaconda2\lib\site-packages\django\urls\resolvers.py", line 313, in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
  File "C:\Program Files (x86)\Anaconda2\lib\site-packages\django\utils\functional.py", line 35, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "C:\Program Files (x86)\Anaconda2\lib\site-packages\django\urls\resolvers.py", line 306, in urlconf_module
    return import_module(self.urlconf_name)
  File "C:\Program Files (x86)\Anaconda2\lib\importlib\__init__.py", line 37, in import_module
    __import__(name)
  File "C:\MintJules\WebApp\MintJules\MintJules\urls.py", line 25, in <module>
    url(r'^orders/',include('orders.urls')),
  File "C:\Program Files (x86)\Anaconda2\lib\site-packages\django\conf\urls\__init__.py", line 50, in include
    urlconf_module = import_module(urlconf_module)
  File "C:\Program Files (x86)\Anaconda2\lib\importlib\__init__.py", line 37, in import_module
    __import__(name)
  File "C:\MintJules\WebApp\MintJules\orders\urls.py", line 25, in <module>
    url(r'^media/(.*)$', 'django.views.static.serve', {'document_root':os.path.join(os.path.dirname(__file__), 'static')}),
  File "C:\Program Files (x86)\Anaconda2\lib\site-packages\django\conf\urls\__init__.py", line 85, in url
    raise TypeError('view must be a callable or a list/tuple in the case of include().')
TypeError: view must be a callable or a list/tuple in the case of include().

1 个答案:

答案 0 :(得分:0)

仔细查看错误堆栈跟踪:

url(r'^media/(.*)$', 'django.views.static.serve',{'document_root':os.path.join(os.path.dirname(__file__), 'static')})
  

TypeError:对于include(),视图必须是可调用或列表/元组

Django 1.10不再允许您在网址格式中将视图指定为字符串(例如'django.views.static.serve')。

解决方案是更新您的urls.py以包含可调用的视图。这意味着您必须导入urls.py中的视图:

from django.views.static import serve

urlpatterns = [
    url(r'^media/(.*)$', serve, {'document_root':os.path.join(os.path.dirname(__file__), 'static')}),
    # ...
]

这也在the Django docs中说明。