Ничего не появляется в 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',
    },
}

скриншоты:

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

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

enter image description here

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-адресу, который вы пытаетесь просмотреть.

короче говоря, вы должны следовать точно документация рекомендует, или вы получите неожиданные результаты.