Ничего не появляется в URL "http://localhost:8000/buy/"
Я хотел включить портал электронной коммерции на моем сайте, и я сделал все, как указано на странице "создать свой магазин", как указано в Джанго-Оскар документация, только что в urls.py вместо
url(r'', include(application.urls)),
Я добавил
url(r'^buy/', include(application.urls)),
но проблема в том, что когда я нажимаю url-адрес, он ничего не показывает и не выдает ошибку.
есть идеи, в чем может быть проблема?
Это могут быть некоторые URL-адреса столкновение или что-то еще тривиальное, но я не могу понять, с чего начать отладку.
файл 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)),
)
файл 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',
},
}
скриншоты:
5 ответов
Я вижу, что на втором скриншоте localhost:8000/buy/catalogue/
вы действительно получите результат. Казалось бы, вы не определили свои собственные шаблоны или как-то нужно исправить ваш TEMPLATE_DIRS
или TEMPLATE_CONTEXT_PROCESSORS
настройки.
Я не использовал Оскар, но тот факт, что вы получаете что-то на экране, кажется мне проблемой загрузки шаблона.
см. их документы о настройке template_context_processors
можете ли вы опубликовать свои настройки пожалуйста.
обновление:
после просмотра ваших настроек, template_context_processors выглядеть правильно. Затем я посмотрел на шаблоны Оскара, и они, похоже, расширяются без квалификации каталога Оскара. Например, макет.html (/oscar / шаблоны / Оскар / макет.html) делает это:
{% extends 'base.html' %}
теперь, если у вас также есть база.html ' файл в вашем собственном каталоге проекта, скажем project_dir / templates / base.html, тогда он, вероятно, будет использовать это вместо этого. Можно попробовать временно переименуйте этот файл (если он существует) и посмотреть, что происходит?
urls.py
url(r'^buy/', include("app.urls")),
затем в каталоге приложения создайте файл с именем urls.py
app/urls.py
# this is your “http://localhost:8000/buy/”
url(r'^$', ViewName.as_view(), name="thename"),
In app/urls.py добавить следующую строку:
url(r'^$',views.index,name='index'),
это перенаправит вас к функции индекса в app/views.py В app/views.py сделайте что-нибудь вроде этого:
def index(request):
#Your logic here
return render(request,'urpoll/index.html'{'category':categorys,'ques':ques,'url':url})
это будет отображать индекс.html с категориями, вопросами, url. В индексе.HTML так что-то вроде этого:
{{ if category }}
{{ category }}
{{ endif }}
надеюсь, это поможет.
возможно, у вас есть столкновение имен с шаблонами. Загрузчик шаблонов Django по умолчанию, который, я полагаю, вы используете, может быть немного неинтуитивным. Когда вы спрашиваете его о шаблоне с заданным именем, он проходит через ваш INSTALLED_APPS
Кортеж в настройках по порядку, проверяя в каждом из них папку шаблонов. Если в двух разных приложениях есть два шаблона с одним и тем же путем, он всегда будет первым.
вот почему рекомендация в Джанго документы is чтобы "пространство имен" ваши шаблоны, сохраняя их все в другой папке с именем вашего приложения, в папке шаблонов. Оскар делает это, поэтому их шаблоны находятся в oscar/templates/oscar
, поэтому они не должны сталкиваться с любыми другими приложениями, но мне интересно, может быть, вы поместите папку "Оскар" в шаблоны одного из ваших приложений, возможно, сталкиваясь с base.html
.
проблема в том, что django-oscar не предназначен для включения в под-путь, например /buy/
. В их документации их пример показывает установку его как:
url(r'', include(application.urls)),
если вы посмотрите на источник of get_urls()
, который содержит возвращаемое значение application.urls
, вы можете видеть, что он не предоставляет urlpattern для соответствия r'^$'
, что вам нужно будет соответствовать URL-адресу, который вы пытаетесь просмотреть.
короче говоря, вы должны следовать точно документация рекомендует, или вы получите неожиданные результаты.