У меня проблема с тем, что мой шаблонный тег django {% url%} добавляет путь к файлу к производственному веб-адресу.Это не реплицируется на мою локальную машину разработки.
При такой настройке urls.py, что:
url("^about_us/$", views.about_us, name="about_us"),
В процессе производства я получаю ссылку www.mysite.com/home/username/ myapp / about_us вместо www.mysite.com/about_us
Я смотрел на подобную проблему, и она не помогает в моем конкретном приложении: Тег URL-адреса Django добавляет путь к файлу
Мой проект django размещен на хостинге A2 (общий) с использованием apache, wsgi и passenger.Мой файл .htaccess выглядит следующим образом:
# DO NOT REMOVE. CLOUDLINUX PASSENGER CONFIGURATION BEGIN
PassengerAppRoot "/home/user/myapp"
PassengerBaseURI "/"
PassengerPython "/home/user/virtualenv/myapp/2.7/bin/python2.7"
# DO NOT REMOVE. CLOUDLINUX PASSENGER CONFIGURATION END
Мой файл passenger_wsgi.py выглядит следующим образом:
import myapp.wsgi
SCRIPT_NAME = '/home/user/myapp'
class PassengerPathInfoFix(object):
"""
Sets PATH_INFO from REQUEST_URI because Passenger doesn't provide it.
"""
def __init__(self, app):
self.app = app
def __call__(self, environ, start_response):
from urlparse import unquote
environ['SCRIPT_NAME'] = SCRIPT_NAME
request_uri = unquote(environ['REQUEST_URI'])
script_name = unquote(environ.get('SCRIPT_NAME', ''))
offset = request_uri.startswith(script_name) and len(environ['SCRIPT_NAME']) or 0
environ['PATH_INFO'] = request_uri[offset:].split('?', 1)[0]
return self.app(environ, start_response)
application = myapp.wsgi.application
application = PassengerPathInfoFix(application)
Мне кажется, что в одном из этих файлов что-то отключено.Как я могу удалить / home / user / myapp из моих ссылок?
Обновление : Мне показалось, что я решил эту проблему.Когда я изменяю переменную SCRIPT_NAME в passenger_wsgi.py на
SCRIPT_NAME = '.'
, это изначально решает проблему, когда я перехожу на домашнюю страницу.Однако новая проблема приводит к тому, что если вы перейдете по адресу www.mysite.com/about_us, то тег {% url%} приведет к
www.mysite.com / about_us / about_us
Может быть, это даст направление к решению.
Обновление # 2 : Я нашел это: https://smartlazycoding.com/django-tutorial/deploy-a-django-website-to-a2-hosting
На этом сайте изменил passenger_wsgi.py файл к
import os
import sys
# set variables
sys.path.append(os.getcwd())
os.environ['DJANGO_SETTINGS_MODULE'] = 'project_name.settings'
#setup django application
import django.core.handlers.wsgi
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
исправляет проблему, но тогда у вас все еще есть проблема POST, которую он описывает.Затем я внес изменения, рекомендуемые веб-сайтом:
import os
import sys
# Set up paths and environment variables
sys.path.append(os.getcwd())
os.environ['DJANGO_SETTINGS_MODULE'] = 'project_name.settings'
import django.core.handlers.wsgi
from django.core.wsgi import get_wsgi_application
SCRIPT_NAME = os.getcwd()
class PassengerPathInfoFix(object):
def __init__(self, app):
self.app = app
def __call__(self, environ, start_response):
from urllib import unquote
environ['SCRIPT_NAME'] = SCRIPT_NAME
request_uri = unquote(environ['REQUEST_URI'])
script_name = unquote(environ.get('SCRIPT_NAME', ''))
offset = request_uri.startswith(script_name) and len(environ['SCRIPT_NAME']) or 0
environ['PATH_INFO'] = request_uri[offset:].split('?', 1)[0]
return self.app(environ, start_response)
application = get_wsgi_application()
application = PassengerPathInfoFix(application)
Это приводит к моей первоначальной проблеме.