2015-05-02 3 views
6

Volevo includere un portale di e-commerce sul mio sito web e ho fatto tutto come indicato nella pagina "Crea il tuo negozio" come indicato in Django -Oscar documentazione, solo che in urls.py invece diNulla che appare all'URL "http: // localhost: 8000/buy /"

url(r'', include(application.urls)), 

ho aggiunto

url(r'^buy/', include(application.urls)), 

ma il problema è che quando mi ha colpito l'url non è né mostrare nulla né dare un errore.

Qualche idea di quale potrebbe essere il problema?

Potrebbe essere che alcuni URL si scontrino o qualcos'altro banale ma non sono in grado di capire da dove iniziare il debug.

File urls.py

from django.conf.urls import patterns, include, url 
from django.contrib import admin 
from view import AboutusView, TwentySevenView 
import apps.users.views 
from django.conf import settings 

    #oscar urls 
    from oscar.app import application 

    admin.site.site_header = '' 
    urlpatterns = patterns('', 
          # Examples: 
          # url(r'^$', 'torquehp.views.home', name='home'), 
          # url(r'^users/', include('users.urls')), 
          url(r'^i18n/', include('django.conf.urls.i18n')), 
          url(r'^admin/', include(admin.site.urls)), 
          url(r'^about-us/$', AboutusView.as_view(), name="about-us"), 
          url(r'^24x7/$', TwentySevenView.as_view(), name="24x7"), 
          url(r'^$', apps.users.views.user_home, name="home"), 
          url(r'^markdown/', include('django_markdown.urls')), 
          url(r'^users/', include('apps.users.urls')), 
          url(r'^doorstep/', include('apps.doorstep.urls')), 
          url(r'^cars/', include('apps.cars.urls')), 
          url('', include('social.apps.django_app.urls', namespace='social')), 
          # urls for zinnia 
          url(r'^blog/', include('zinnia.urls', namespace='zinnia')), 
          url(r'^comments/', include('django_comments.urls')), 
          url(r'^media/(?P<path>.*)$', 'django.views.static.serve', 
           {'document_root': settings.MEDIA_ROOT, }), 
          # oscar URLs 
          url(r'^buy/', include(application.urls)), 
    ) 

File settings.py

import os 
import sys 
from oscar import get_core_apps 
from oscar import OSCAR_MAIN_TEMPLATE_DIR 
from oscar.defaults import * 

BASE_DIR = os.path.dirname(os.path.dirname(__file__)) 
location = lambda x: os.path.join(
    os.path.dirname(os.path.realpath(__file__)), x) 

# sys.path.insert(0, os.path.join(BASE_DIR, 'apps')) # to store apps in apps/ directory 


# Quick-start development settings - unsuitable for production 
# See https://docs.djangoproject.com/en/1.7/howto/deployment/checklist/ 

# SECURITY WARNING: keep the secret key used in production secret! 
SECRET_KEY = '' 

# SECURITY WARNING: don't run with debug turned on in production! 
DEBUG = True 

TEMPLATE_DEBUG = True 

ALLOWED_HOSTS = [] 


# Application definition 

INSTALLED_APPS = [ 
    'django.contrib.auth', 
    'django.contrib.admin', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    'django.contrib.flatpages', 
    'apps.users', 
    'apps.doorstep', 
    'apps.cars', 
    'django_markdown', 
    'social.apps.django_app.default', 
    'django.contrib.sites', 
    'django_comments', 
    'mptt',    
    'tagging',   
    'zinnia',   
    'compressor', 
    ] + get_core_apps() 
# specifying the comments app 
# COMMENTS_APP = 'zinnia_threaded_comments' 

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.middleware.clickjacking.XFrameOptionsMiddleware', 
    'oscar.apps.basket.middleware.BasketMiddleware', 
    'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware', 
) 

# Authentication backend used by python-social-auth 
AUTHENTICATION_BACKENDS = (
    'social.backends.facebook.FacebookOAuth2', 
    'social.backends.google.GoogleOAuth2', 
    'django.contrib.auth.backends.ModelBackend', 
    'oscar.apps.customer.auth_backends.EmailBackend', 
) 

TEMPLATE_CONTEXT_PROCESSORS = (
    "social.apps.django_app.context_processors.backends", 
    "social.apps.django_app.context_processors.login_redirect", 
    "django.contrib.auth.context_processors.auth", 
    "django.contrib.messages.context_processors.messages", 
    "django.core.context_processors.i18n", 
    "django.core.context_processors.request", 
    "zinnia.context_processors.version", 
    "django.core.context_processors.debug", 
    "django.core.context_processors.media", 
    "django.core.context_processors.static", 
    "django.core.context_processors.tz", 
    'oscar.apps.search.context_processors.search_form', 
    'oscar.apps.promotions.context_processors.promotions', 
    'oscar.apps.checkout.context_processors.checkout', 
    'oscar.apps.customer.notifications.context_processors.notifications', 
    'oscar.core.context_processors.metadata' 
) 

# TEMPLATE_LOADERS = (
#  'app_namespace.Loader', 
#) 

ROOT_URLCONF = 'torquehp.urls' 

WSGI_APPLICATION = 'torquehp.wsgi.application' 


# Database 
# https://docs.djangoproject.com/en/1.7/ref/settings/#databases 

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.mysql', 
     'NAME': "", 
     'USER': '', 
     'PASSWORD': '', 
     'HOST': 'localhost', 
     'PORT': '3306' 
    } 
} 

# Internationalization 

LANGUAGE_CODE = 'en-us' 

TIME_ZONE = 'UTC' 

USE_I18N = True 

USE_L10N = True 

USE_TZ = True 

LOGIN_URL = '/users/login/' 

# Static files (CSS, JavaScript, Images) 
# https://docs.djangoproject.com/en/1.7/howto/static-files/ 

STATIC_URL = '/static/' 
STATIC_ROOT = os.path.join(BASE_DIR, '/static/') 
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/') 
MEDIA_URL = "/media/" 
TEMPLATE_DIRS = (
    os.path.join(BASE_DIR, 'templates').replace('\\', '/'), 
    location('templates'), 
    OSCAR_MAIN_TEMPLATE_DIR, 
) 

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'staticfiles'), 


) 
REGISTRATION_INVALID = 50 
MESSAGE_TAGS = { 
    REGISTRATION_INVALID: 'InvalidDetails', 
} 
# temporary , should not be in settings file 
SOCIAL_AUTH_FACEBOOK_KEY = "" 
SOCIAL_AUTH_FACEBOOK_SECRET = "" 
SOCIAL_AUTH_FACEBOOK_SCOPE = ['email'] 

SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = "" 
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = "" 

LOGIN_REDIRECT_URL = '/blog/' 

# ------------------------------------ # 
# Settings for sending email # 

EMAIL_USE_TLS = True 
EMAIL_HOST = 'smtp.gmail.com' 
EMAIL_PORT = 587 
EMAIL_HOST_USER = '' 
EMAIL_HOST_PASSWORD = '' 
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER 
SERVER_EMAIL = EMAIL_HOST_USER 
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' 
# ------------------------------------ # 


# site id for django sites framework 
SITE_ID = 1 

# configuration settings for django-zinnia 
ZINNIA_PING_EXTERNAL_URLS = False 
ZINNIA_SAVE_PING_DIRECTORIES = False 
ZINNIA_MARKUP_LANGUAGE = 'markdown' 
ZINNIA_UPLOAD_TO = 'uploads/zinnia/' 
# TimeZone Settings 
USE_TZ = True 

# ------------------------ # 
# django s=oscar search settings 
HAYSTACK_CONNECTIONS = { 
    'default': { 
     'ENGINE': 'haystack.backends.simple_backend.SimpleEngine', 
    }, 
} 

Screenshots:

http://localhost:8000/buy/ enter image description here

http://localhost:8000/buy/catalogue/

enter image description here

+0

hai un file 'application/urls.py'? È 'application' nella tua impostazione' INSTALLED_APPS'? Esiste un file 'application/__ init __. Py'? – Ewan

+0

@Ewan django-oscar ti fa importare "dall'applicazione di importazione oscar.app" – ofnowhere

+0

Le mie scuse; Ho appena visto il tag. E se vai a "comprare/offerte /'? " ancora niente? o un 404? hai 'DEBUG = True' anche nelle tue impostazioni? – Ewan

risposta

5

Vedo che nel tuo secondo screenshot localhost:8000/buy/catalogue/ ottieni effettivamente un risultato. Sembrerebbe che tu non abbia definito i tuoi modelli o che in qualche modo sia necessario correggere le tue impostazioni TEMPLATE_DIRS o TEMPLATE_CONTEXT_PROCESSORS.

Non ho usato oscar, ma il fatto che si ottenga qualcosa sullo schermo mi sembra un problema di caricamento del modello.

See their docs about setting the template_context_processors

potete inserire le impostazioni per favore?

Aggiornamento:

Dopo aver visto le impostazioni, i template_context_processors sembrano corrette. Ho poi guardato i modelli di Oscar e sembrano estendersi senza qualificare la directory di Oscar. Ad esempio, layout.html (/oscar/templates/oscar/layout.html) fa questo:

{% extends 'base.html' %} 

Ora, se avete anche un file 'base.html' nella propria directory del progetto, dire project_dir/templates/base.html, probabilmente lo userà invece. Puoi provare a rinominare temporaneamente quel file (se esiste) e vedere cosa succede?

+0

Pubblicato settings.py – ofnowhere

+0

aggiornato la mia risposta – Esteban

+0

Grazie, stesso problema, ha funzionato – ofnowhere

1

urls.py

url(r'^buy/', include("app.urls")), 

Poi sotto la cartella app crea un file chiamato urls.py

app/urls.py

# this is your “http://localhost:8000/buy/” 
url(r'^$', ViewName.as_view(), name="thename"), 
+0

Non è la mia app, è nell'app di Django-Oscar quindi penso che sia codificata bene. – ofnowhere

0

in app/urls.py aggiungere la seguente riga:

url(r'^$',views.index,name='index'), 

Questo vi favore usare la funzione di indice in app/views.py in app/views.py fare qualcosa di simile:

def index(request): 
    #Your logic here 
    return render(request,'urpoll/index.html'{'category':categorys,'ques':ques,'url':url}) 

Ciò renderizza index.html con categorie, ques, url. In index.HTML quindi qualcosa del genere:

{{ if category }} 
{{ category }} 
{{ endif }} 

Spero che questo possa essere d'aiuto.

0

Forse hai una collisione di nomi con i modelli. Il caricatore di template di default di Django, che presumo tu stia utilizzando, può essere un po 'non intuitivo. Quando lo chiedi per un modello con un nome specifico, passa attraverso la tua tupla INSTALLED_APPS nelle impostazioni in ordine, verificando ciascuna di esse per una cartella di modelli. Se ci sono due modelli con lo stesso percorso in due diverse app, prenderà sempre il primo che trova.

Ecco perché la raccomandazione in django docs consiste nello "spazio dei nomi" dei modelli mantenendoli tutti in un'altra cartella con il nome dell'app, all'interno della cartella dei modelli. Oscar fa questo, quindi i loro modelli sono in oscar/templates/oscar, quindi non dovrebbero essere in conflitto con altre app, ma mi chiedo se magari metterai una cartella 'oscar' all'interno dei modelli di una delle tue app, possibilmente in contrasto con base.html .

0

Il problema è che django-oscar non è destinato a essere incluso in un percorso secondario, ad esempio /buy/. Nella loro documentazione, il loro esempio mostra installarlo come:

url(r'', include(application.urls)), 

Se si guarda alla the source di get_urls(), che fornisce il valore di ritorno per application.urls, si può vedere che non fornisce un URLPATTERN per abbinare r'^$', che è cosa dovresti abbinare all'URL che stai cercando di visualizzare.

In breve, si consiglia di seguire esattamente ciò che la documentazione raccomanda o si ottengono risultati imprevisti.

+0

Ho provato lo stesso con l'installazione di django-oscar solo vanilla e funzionava bene. – ofnowhere