2017-09-10 2 views
0

Je m'excuse si c'est un doublon. J'ai parcouru le web et essayé plusieurs solutions. J'ai construit un téléchargeur d'image qui télécharge les images au bon emplacement mais, je pense que j'ai quelque chose dans mon urls.py qui m'empêche d'afficher les images.Affichage d'images dans Django - Configuration d'urls.py

Les lignes commentées sont des tentatives que j'ai faites mais je n'ai pas de chance. 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'),] 

Vue:

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') 

code dans le modèle:

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

erreur habituelle je vois:

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(). 

Répondre

0

Regardez bien votre erreur stacktrace:

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

TypeError: vue doit être un appelable ou une liste/tuple dans le cas de include().


Django 1.10 ne vous permet de spécifier des vues sous forme de chaîne (par exemple 'django.views.static.serve') dans vos modèles d'URL.

La solution est de mettre à jour votre urls.py pour inclure la vue appelable. Cela signifie que vous devez importer la vue dans votre urls.py:

from django.views.static import serve 

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

Ceci est également indiqué dans the Django docs.

+0

Oui. C'était ... je ne peux pas croire que j'ai raté ça. Merci!! – ColtonChristensen1

+1

S'il vous plaît ne pas oublier cette solution ne fonctionne que dans DEBUG = True. Il est défini comme suit: ' si settings.DEBUG: urlpatterns + = statique (settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)' En production, vous devez servir vos fichiers statiques et des médias en utilisant des outils tels que Nginx – deaspo

+0

@ Deaspo Oui. Une belle note. – wencakisa