【问题标题】:Displaying Images in Django - Setting up urls.py在 Django 中显示图像 - 设置 urls.py
【发布时间】:2017-09-10 17:56:28
【问题描述】:

如果这是重复的,我深表歉意。我一直在网上搜索并尝试了多种解决方案。我已经构建了一个图像上传器,可以将图像上传到正确的位置,但是我认为我的 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().

【问题讨论】:

    标签: python django django-urls


    【解决方案1】:

    仔细查看您的错误堆栈跟踪:

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

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


    Django 1.10 不再允许您在 URL 模式中将视图指定为字符串(例如 '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 中也说明了这一点。

    【讨论】:

    • 请不要忘记此解决方案仅在 DEBUG=True 时有效。设置如下:` if settings.DEBUG: urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)` 在生产中,您必须使用 Nginx 等工具提供静态和媒体文件
    • @deaspo 是的。很好的笔记。
    猜你喜欢
    • 2012-12-10
    • 2015-06-04
    • 1970-01-01
    • 2015-04-15
    • 1970-01-01
    • 2015-07-15
    • 1970-01-01
    • 1970-01-01
    • 2011-03-17
    相关资源
    最近更新 更多