Так как это был первый результат в моем поиске в Google, и лучший ответ скрыт в ссылке Даниэля (но не упомянут как лучший), я решил, что я просто опубликую ответ, чтобы никто не поддался искушению вернуть пустой ответкоторый, как указывает Майкл, не идеален.
Решение состоит в том, чтобы использовать стандартное представление и возвращать HttpResponse с необработанными данными, которые составляют один пиксельный gif.Отсутствие необходимости нажимать на диск или перенаправлять - это огромное преимущество.
Обратите внимание, что шаблон URL использует код отслеживания в качестве имени изображения, поэтому в URL нет очевидного? Code = jf8992jf.
from django.conf.urls import patterns, url
from emails.views.pixel import PixelView
urlpatterns = patterns('',
url(r'^/p/(?P<pixel>\w+).gif$', PixelView.as_view(), name='email_pixel'),
)
А вот и вид.Обратите внимание, что он использует cache_control, чтобы запретить выполнение запросов.Например, Firefox (наряду со многими почтовыми клиентами) будет запрашивать изображение дважды каждый раз, по какой-то причине, которую вы, вероятно, не волнуете, но должны беспокоиться.Добавив max_age = 60, вы просто получите один запрос в минуту.
from django.views.decorators.cache import cache_control
from django.http.response import HttpResponse
from django.views.generic import View
class PixelView(View):
@cache_control(must_revalidate=True, max_age=60)
def get(self, request, pixel):
"""
Tracking pixel for opening an email
:param request: WSGIRequest
:param pixel: str
:return: HttpResponse
"""
# Do whatever tracking you want here
# Render the pixel
pixel_image = b'\x47\x49\x46\x38\x39\x61\x01\x00\x01\x00\x80\x00\x00\xff\xff\xff\x00\x00\x00\x21\xf9\x04\x01\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x01\x00\x01\x00\x00\x02\x02\x44\x01\x00\x3b'
return HttpResponse(pixel_image, content_type='image/gif')