это должно быть что-то простое, но я потратил последние два часа, пытаясь это исправить. Это на Django 1.7 и Python 2.7Ошибка с URL-адресом в шаблоне
Я получаю следующее сообщение об ошибке:
ImproperlyConfigured at/
The included urlconf 'blog.urls' does not appear to have any patterns in it. If you see valid patterns in the file then the issue is probably caused by a circular import.
, которая была вызвана этой линии в шаблоне:
>> {% url 'referrals:confirm_referral' claimCode %} <<
когда следующая строка выполняется в представлении:
msg_plain = render_to_string('referrals/email/sendInvite.txt', emailVariables)
Я попытался reverse_lazy вызов в пределах dict, а также ленивый, но это не решило проблему.
Вот мой urls.py:
urlpatterns = patterns('',
url(r'^confirm-referral/<confirm_code>[a-zA-Z0-9]{8}$', views.confirmReferral, name='confirm_referral',),
)
здесь соответствующая часть кода (в отдельном файле под названием jobs.py):
emailVariables = {
'commsPromoHeadline' : thisOfferClaim.linkedOffer.commsPromoHeadline,
'commsPromoSubHeading' : thisOfferClaim.linkedOffer.commsPromoSubHeading,
'commsInvitationShortMessage' : thisOfferClaim.linkedOffer.commsInvitationShortMessage,
'commsInvitationLongMessage' : thisOfferClaim.linkedOffer.commsInvitationLongMessage,
'commsOfferButtonText' : thisOfferClaim.linkedOffer.commsOfferButtonText,
'commsBanner' : thisOfferClaim.linkedOffer.commsBanner,
'claimCode' : thisRecipient.claimCode,
#'offerLink' : lazy('referrals:confirm_referral' + thisRecipient.claimCode),
#'offerLink' : reverse_lazy('referrals:confirm_referral'),
'sender': thisOfferClaim.sender,
'recipient' : thisRecipient
}
msg_plain = render_to_string('referrals/email/sendInvite.txt', emailVariables)
msg_html = render_to_string('referrals/email/sendInvite.html', emailVariables)
и, наконец, следующее экстракт из соответствующего шаблона:
You can quickly join by clicking on the link below:
>> {% url 'referrals:confirm_referral' claimCode%} <<
Что я делаю неправильно?
Обновление 1: У меня есть две строки, прокомментированные выше в dict. Когда я раскомментировать
offerLink' : reverse_lazy('referrals:confirm_referral'),
я получаю следующее в качестве возвращаемого значения:
<django.utils.functional.__proxy__ object at 0x0441F890>
я ожидал бы строка? Это то, что вызывает проблему?
Update 2: Мой главный urls.py ниже:
import os
from django.views.generic import TemplateView
from django.conf.urls import patterns, include, url
from django.conf.urls.static import static
from django.conf import settings
from django.contrib import admin
from wagtail.wagtailadmin import urls as wagtailadmin_urls
from wagtail.wagtailsearch import urls as wagtailsearch_urls
from wagtail.wagtaildocs import urls as wagtaildocs_urls
from wagtail.wagtailcore import urls as wagtail_urls
from wagtail.contrib.wagtailsitemaps.views import sitemap
#import debug_toolbar
urlpatterns = patterns('',
#url(r'^__debug__/', include(debug_toolbar.urls)),
url('^$', TemplateView.as_view(template_name='home.html')),
url(r'^', include('people.urls')),
url(r'^', include('reviews.urls')),
url(r'^', include('commerce.urls')),
url(r'^accounts/', include('allauth.urls')),
url(r'^activities/', include('video.urls',namespace='activities')),
url(r'^course/', include('video.urls',namespace='course-videos')),
url(r'^refer/', include('referrals.urls',namespace='referrals')),
url(r'^robots.txt$', TemplateView.as_view(template_name='robots.txt', content_type='text/plain')),
url(r'^', include('people.urls')),
url(r'^mission-control/', include(admin.site.urls)),
url(r'^cms-admin/', include(wagtailadmin_urls)),
url(r'^search/', include(wagtailsearch_urls)),
url(r'^documents/', include(wagtaildocs_urls)),
url('^sitemap\.xml$', sitemap),
url(r'^', include(wagtail_urls)),
)
if settings.DEBUG:
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += staticfiles_urlpatterns()
urlpatterns += static(settings.MEDIA_URL + 'video/', document_root=os.path.join(settings.MEDIA_ROOT, 'video'))
urlpatterns += static(settings.MEDIA_URL + 'images/', document_root=os.path.join(settings.MEDIA_ROOT, 'images'))
urlpatterns += static(settings.MEDIA_URL + 'attachments/', document_root=os.path.join(settings.MEDIA_ROOT, 'attachments'))
urlpatterns += static(settings.MEDIA_URL + 'platform/', document_root=os.path.join(settings.MEDIA_ROOT, 'platform'))
urlpatterns += static(settings.MEDIA_URL + 'offer/', document_root=os.path.join(settings.MEDIA_ROOT, 'offer'))
urlpatterns += static(settings.MEDIA_URL + 'people/', document_root=os.path.join(settings.MEDIA_ROOT, 'people'))
urlpatterns += static(settings.MEDIA_URL + 'reward/', document_root=os.path.join(settings.MEDIA_ROOT, 'reward'))
Update 3: Я переместил все в вид, но я все еще получаю ту же ошибку. Код можно найти ниже:
class sendReferralMail():
##########################################################
# this job sends out emails who have been invited to
# participate in a referral scheme
##########################################################
try:
#try to get all outstanding claims that are linked to receipients with a status of "commsPending". also prefetch recipient details to minimise DB hits
allOfferClaims = OfferClaim.objects.filter(recipient__status='commsPending').prefetch_related('recipient')
except:
allOfferClaims = None
if allOfferClaims:
for thisOfferClaim in allOfferClaims:
#go through each recipient that we've already filtered on previously
for thisRecipient in thisOfferClaim.recipient.all():
if thisRecipient.status == 'commsPending':
#get offer-specific content that we should be sending them
emailVariables = {
'commsPromoHeadline' : thisOfferClaim.linkedOffer.commsPromoHeadline,
'commsPromoSubHeading' : thisOfferClaim.linkedOffer.commsPromoSubHeading,
'commsInvitationShortMessage' : thisOfferClaim.linkedOffer.commsInvitationShortMessage,
'commsInvitationLongMessage' : thisOfferClaim.linkedOffer.commsInvitationLongMessage,
'commsOfferButtonText' : thisOfferClaim.linkedOffer.commsOfferButtonText,
'commsBanner' : thisOfferClaim.linkedOffer.commsBanner,
'claimCode' : thisRecipient.claimCode,
'domain' : Site.objects.get_current().domain,
'offerLink' : unicode(reverse_lazy('referrals:confirm_referral')),
'full_url' : ''.join(['http://', Site.objects.get_current().domain, unicode(reverse_lazy('referrals:confirm_referral')), thisRecipient.claimCode]),
'sender': thisOfferClaim.sender,
'recipient' : thisRecipient
}
msg_plain = render_to_string('referrals/email/sendInvite.txt', emailVariables)
msg_html = render_to_string('referrals/email/sendInvite.html', emailVariables)
send_mail(
thisOfferClaim.linkedOffer.commsPromoHeadline,
msg_plain,
settings.REFERRAL_EMAIL_SENDER,
[thisRecipient.email],
html_message=msg_html,
)
Пожалуйста, отобразите основной urls.py который включает этот. –
@ DanielRoseman - главная urls.py сейчас в обновлении 2. спасибо за вашу помощь до сих пор – AndrewO