У меня есть сайт, использующий Django. Каждый пост - это объект, называемый статьей. Я хочу, чтобы получить HTML Почты после сохранения его, так что я написал следующее post_save крюка:Разве Django post_save запускается до/после сохранения экземпляра базы данных?
@receiver(models.signals.post_save, sender=Article)
def _send_article_mentions(sender, instance, **kwargs):
import requests
from django.contrib.sites.models import Site
from urlparse import urljoin
from ParallelTransport.settings import ARTICLES_URL
SITE_URL = 'http://'+Site.objects.get_current().domain
article_url = urljoin(SITE_URL, instance.get_absolute_url())
import time
time.sleep(20)
r = requests.get(article_url)
error_file = open(ARTICLES_URL+'/'+'error.txt','w')
error_file.write('file started1\n')
m = r.status_code
error_file.write(str(m))
error_file.close()
Это в основном ждет 20-х лет (добавляемых в качестве теста), а затем пытается извлечь HTML поста, используя его URL, и записывает код состояния запроса в файл для отладки.
Проблема заключается в том, что я всегда получаю статус = 404 при первом сохранении, он работает на 2-й и последующие сейвы. Я думал, что работа Django будет в порядке:
- сохранить экземпляр базы данных, используя save(). На данный момент пост получит URL-адрес
- отправить post_save сигнал
Но тогда я должен быть в состоянии восстановить HTML в post_save. Я неправильно понимаю post_save?
Добавлены примечания:
- Ввод этого кода в Save() метод не работает. Не стоит. Сообщение добавляется в базу данных в конце метода save() и поэтому не должно содержать URL до завершения сохранения().
- Это на производственной площадке, а не на сервере разработки.
- Я хочу использовать ссылки в HTML, чтобы отправить 'pingbacks', или фактически webmention. Но все мои pingbacks отклоняются, потому что сообщение еще не имеет URL-адреса. Это минимальный код, который не работает.
Вы рассмотрели другой способ сделать это: вместо того, чтобы извлекать статью с помощью HTTP, просто непосредственно визуализируйте шаблон статьи в строку. См. Https://docs.djangoproject.com/en/1.6/ref/templates/api/#the-render-to-string-shortcut – Scintillo
Я хочу использовать ссылки в HTML для отправки «pingbacks» или фактически [webmention ] (http://indiewebcamp.com/webmention). Но все мои pingbacks отклоняются, потому что сообщение еще не имеет URL-адреса. Это минимальный минимальный код, который не работает. –