Here are the examples of the python api django.utils.translation.ugettext taken from open source projects. By voting up you can indicate which examples are most useful and appropriate.
160 Examples
4
Example 1
def get_choices(self):
choices = []
try:
model = BrandModel.objects.get(pk=self.parent_value)
if 'Sportback' in model.title or 'Cabrio' in model.title or 'Coupe' in model.title:
return [
('RED', ugettext(u'red')),
('WHITE', ugettext(u'white')),
('BLACK', ugettext(u'black')),
('YELLOW', ugettext(u'yellow')),
('SILVER', ugettext(u'silver')),
]
for color in Car.COLORS:
choices.append((color[0], ugettext(color[1])))
return choices
except (ObjectDoesNotExist, KeyError):
return []
4
Example 2
def format_quote(sender, body):
"""
Wraps text at 55 chars and prepends each
line with `> `.
Used for quoting messages in replies.
"""
lines = wrap(body, 55).split('\n')
for i, line in enumerate(lines):
lines[i] = "> %s" % line
quote = '\n'.join(lines)
return ugettext(u"%(sender)s wrote:\n%(body)s") % {
'sender': sender,
'body': quote
}
3
Example 3
def __str__(self):
if self.action_flag == self.ADDITION:
return ugettext('Added "%(object)s".') % {
'object': self.object_repr}
elif self.action_flag == self.CHANGE:
return ugettext('Changed "%(object)s" - %(changes)s') % {
'object': self.object_repr,
'changes': self.change_message,
}
elif self.action_flag == self.DELETION:
return ugettext('Deleted "%(object)s."') % {
'object': self.object_repr}
return ugettext('LogEntry Object')
3
Example 4
Project: django-vies Source File: types.py
def verify_regex(self):
country = dict(map(
lambda x, y: (x, y), ('country', 'validator', 'formatter'),
VIES_OPTIONS[self.country_code]
))
if not country['validator'].match("%s%s" % (self.country_code, self.number)):
msg = ugettext("%s does not match the countries VAT ID specifications.")
raise ValidationError(msg % self)
3
Example 5
Project: django-inviting Source File: views.py
@staff_member_required
def reward(request):
"""
Add invitations to users with high invitation performance and redirect
refferring page.
"""
rewarded_users, invitations_given = InvitationStats.objects.reward()
if rewarded_users:
message = ugettext(u'%(users)s users are given a total of ' \
u'%(invitations)s invitations.') % {
'users': rewarded_users,
'invitations': invitations_given}
else:
message = ugettext(u'No user has performance above ' \
u'threshold, no invitations awarded.')
request.user.message_set.create(message=message)
return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
3
Example 6
@never_cache
def login(self, request, extra_context=None):
context = {
'title': ugettext('Log in'),
'app_path': request.get_full_path(),
REDIRECT_FIELD_NAME: request.get_full_path(),
}
context.update(extra_context or {})
defaults = {
'extra_context': context,
'current_app': self.name,
'authentication_form': self.login_form,
'template_name': self.login_template,
'redirect_to': request.get_full_path(),
}
return login(request, **defaults)
3
Example 7
@register.filter
def location(value):
"""
Transform an IP address into an approximate location.
Example output:
* Zwolle, The Netherlands
* ``<i>unknown</i>``
"""
location = geoip() and geoip().city(value)
if location and location['country_name']:
if location['city']:
return '%s, %s' % (location['city'], location['country_name'])
else:
return location['country_name']
return mark_safe('<i>%s</i>' % ugettext('unknown'))
3
Example 8
Project: django-mongodbforms Source File: documents.py
def get_date_error_message(self, date_check):
return ugettext("Please correct the duplicate data for %(field_name)s "
"which must be unique for the %(lookup)s "
"in %(date_field)s.") % {
'field_name': date_check[2],
'date_field': date_check[3],
'lookup': str(date_check[1]),
}
3
Example 9
@require_GET
@vary_on_headers('Content-Language')
@vary_on_cookie
@cache_control(public=True, max_age=900)
@jsonify
def translate_view(request):
if 'query' in request.GET:
return {'answer': ugettext(request.GET['query'])}
else:
raise SuspiciousOperation
3
Example 10
Project: openode Source File: functions.py
def config_choice_values(group, key, skip_missing=True, translate=False):
"""Get pairs of key, label from the setting."""
try:
cfg = config_get(group, key)
choices = cfg.choice_values
except SettingNotSet:
if skip_missing:
return []
else:
raise SettingNotSet('%s.%s' % (group, key))
if translate:
choices = [(k, ugettext(v)) for k, v in choices]
return choices
3
Example 11
Project: SmartElect Source File: models.py
def sent_to(self):
"""Return audience/recipients (for staff/admin template)"""
audience_display = self.get_audience_display()
if self.audience == self.SINGLE_CENTER and self.center:
audience = ugettext("Registrants in Center")
return "{0} {1}".format(audience, self.center.id)
return audience_display
3
Example 12
def show_title(self, obj):
if not obj.target:
return '-- %s --' % ugettext('empty position')
else:
return u'%s [%s]' % (
getattr(obj.target, 'title', obj.target),
ugettext(obj.target_ct.name),
)
3
Example 13
Project: django-widgy Source File: models.py
def untitled_form():
untitled = ugettext('Untitled form')
n = Form.objects.filter(name__startswith=untitled + ' ').exclude(
_nodes__is_frozen=True
).count() + 1
return '%s %d' % (untitled, n)
3
Example 14
def location(request):
"""
Transform an IP address into an approximate location.
"""
ip = utils.resolve(app_settings.IP_RESOLVER, request)
try:
location = GeoIP() and GeoIP().city(ip)
except:
# Handle 127.0.0.1 and not found IPs
return ugettext('unknown')
if location and location['country_name']:
if location['city']:
return '%s, %s' % (location['city'], location['country_name'])
else:
return location['country_name']
return ugettext('unknown')
3
Example 15
Project: django-misc Source File: share_buttons.py
@register.simple_tag
def tweet_it(request, url, title):
return mark_safe("""
<div class="twitter">
<a href="http://twitter.com/home/?%s" title="%s" target="_blank"></a>
</div>
""" % (urllib.urlencode({'status': title + (u" " + url + u" #escalibro").encode('utf-8')}), ugettext("Tweet it")))
3
Example 16
@login_required
def delete_attachment(request, attachment_pk):
g = get_object_or_404(Attachment, pk=attachment_pk)
if (
(request.user.has_perm('attachments.delete_attachment') and
request.user == g.creator)
or
request.user.has_perm('attachments.delete_foreign_attachments')
):
g.delete()
messages.success(request, ugettext('Your attachment was deleted.'))
next = request.GET.get('next') or '/'
return HttpResponseRedirect(next)
3
Example 17
def save(self, force_insert=False, **kwargs):
if not self.root_item:
root_item = MenuItem()
root_item.caption = ugettext('root')
if not self.pk: # If creating a new object (i.e does not have a pk yet)
super(Menu, self).save(force_insert, **kwargs) # Save, so that it gets a pk
force_insert = False
root_item.menu = self
root_item.save() # Save, so that it gets a pk
self.root_item = root_item
super(Menu, self).save(force_insert, **kwargs)
3
Example 18
def test_choices(self):
with self.assertNumQueries(0):
field = FieldDefinitionTypeField(
ContentType.objects.filter(pk__in=[
self.field_definition_ct.pk, self.custom_field_ct.pk
]).order_by('pk'), group_by_category=False, empty_label='Empty'
)
self.assertEqual(
list(field.choices), [
('', 'Empty'),
] + sorted([
(self.field_definition_ct.pk, 'None'),
(self.custom_field_ct.pk, ugettext('Custom description'))
])
)
3
Example 19
def clean_email(self):
email = self.cleaned_data['email']
if User.objects.filter(email=email).exists():
raise forms.ValidationError(
ugettext('Account with this email already exists'))
return self.cleaned_data['email']
3
Example 20
Project: django-jstemplate Source File: preprocessors.py
def translate_short_form(self, match):
"""Translate a result of matching the compiled trans_re pattern."""
tag = match.group('tag')
msg = match.group('msg')
msg = ugettext(msg) if len(msg) > 0 else ''
string = match.group('left').replace(tag, '', 1) + msg + match.group('right')
return string
3
Example 21
Project: Open-Knesset Source File: models.py
@property
def is_minister(self):
"""Check if one of the roles starts with minister"""
# TODO Once we have roles table change this
minister = ugettext('Minister')
return any(x.startswith(minister) for x in self.roles)
3
Example 22
def __unicode__(self):
""" We're using force unicode as this basically fails:
from django.utils import translation
from django.utils.translation import ugettext_lazy as _
translation.activate('pl')
u'test: %s' % _('Payment method')
"""
return ugettext("%(name)s: %(operator)s %(value)s") % {
'name': force_unicode(self.get_name()),
'operator': force_unicode(self.get_current_operator_as_string()),
'value': force_unicode(self.get_value_as_string())
}
3
Example 23
Project: django-oscar Source File: basket_tests.py
def test_adding_more_than_threshold_raises(self):
dummy_product = create_product(price=D('10.00'), num_in_stock=10)
url = reverse('basket:add', kwargs={'pk': dummy_product.pk})
post_params = {'product_id': dummy_product.id,
'action': 'add',
'quantity': 2}
response = self.client.post(url, post_params)
self.assertTrue('oscar_open_basket' in response.cookies)
post_params = {'product_id': dummy_product.id,
'action': 'add',
'quantity': 2}
response = self.client.post(url, post_params)
expected = ugettext(
"Due to technical limitations we are not able to ship more "
"than %(threshold)d items in one order. Your basket currently "
"has %(basket)d items."
) % ({'threshold': 3, 'basket': 2})
self.assertTrue(expected in response.cookies['messages'].value)
3
Example 24
Project: pycontw2016 Source File: renderers.py
def render_keynoteevent(e):
return format_html(
'<div class="slot-item__content talk">'
'<div class="slot-item__title">{title}</div>'
'<a href="{link}" class="talk__speaker">{speaker}</a>'
'</div>',
title=ugettext('Keynote'),
link=e.get_absolute_url(),
speaker=e.speaker_name,
)
3
Example 25
Project: peer Source File: feeds.py
def item_description(self, item):
if item.metadata:
formatter = HtmlFormatter(linenos=False,
outencoding=settings.DEFAULT_CHARSET)
if item.has_metadata():
xml = item.metadata.read()
return highlight(xml, XmlLexer(), formatter)
else:
return ugettext(u'No metadata yet')
3
Example 26
def __str__(self):
if self.action_flag == 'create':
return ugettext('Added "%(object)s".') % {'object': self.object_repr}
elif self.action_flag == 'change':
return ugettext('Changed "%(object)s" - %(changes)s') % {
'object': self.object_repr,
'changes': self.message,
}
elif self.action_flag == 'delete' and self.object_repr:
return ugettext('Deleted "%(object)s."') % {'object': self.object_repr}
return self.message
3
Example 27
Project: django-reversion Source File: models.py
@cached_property
def _object_version(self):
data = self.serialized_data
data = force_text(data.encode("utf8"))
try:
return list(serializers.deserialize(self.format, data, ignorenonexistent=True))[0]
except DeserializationError:
raise RevertError(ugettext("Could not load %(object_repr)s version - incompatible version data.") % {
"object_repr": self.object_repr,
})
except serializers.SerializerDoesNotExist:
raise RevertError(ugettext("Could not load %(object_repr)s version - unknown serializer %(format)s.") % {
"object_repr": self.object_repr,
"format": self.format,
})
3
Example 28
Project: feincms-elephantblog Source File: models.py
def __str__(self):
try:
translation = self.translation
except models.ObjectDoesNotExist:
return ugettext('Unnamed category')
if translation:
return '%s' % translation
return ugettext('Unnamed category')
3
Example 29
def to_native(self, value):
ret = super(CharField, self).to_native(value)
if self.i18n:
ret = ugettext(ret)
return ret
3
Example 30
def __unicode__(self):
if self.message == 'access_denied':
return ugettext(u'Authentication process was cancelled')
else:
return ugettext(u'Authentication failed: %s') % \
super(AuthFailed, self).__unicode__()
3
Example 31
def is_member(self, gas):
"""
Return ``True`` if this person is member of GAS ``gas``, ``False`` otherwise.
If ``gas`` is not a ``GAS`` model instance, raise ``TypeError``.
"""
if not isinstance(self, GAS):
raise TypeError(ugettext(u"GAS membership can only be tested against a GAS model instance"))
return gas in [member.gas for member in self.gas_memberships]
3
Example 32
def clean(self):
poll_type = self.cleaned_data.get('poll_type', None)
poll_question = self.cleaned_data.get('poll_question', None)
if poll_type is not None and poll_type != Topic.POLL_TYPE_NONE and not poll_question:
raise forms.ValidationError(ugettext('Poll''s question is required when adding a poll'))
return self.cleaned_data
3
Example 33
def __unicode__(self):
if self.user:
return '{0} - {1}'.format(
self.user.get_full_name() or self.user.email, self.event)
elif self.name or self.email:
return '{0} - {1}'.format(self.name or self.email, self.event)
return '{0} - {1}'.format(ugettext('anonymous'), self.event)
3
Example 34
def clean(self):
if self.provider_data:
try:
json.loads(self.provider_data)
except Exception:
raise ValidationError({'provider_data': [ugettext('This should be JSON serialized')]})
if self.timezone == 'UTC':
raise ValidationError({'timezone': [ugettext('UTC is not valid timezone')]})
3
Example 35
Project: crowdata Source File: models.py
def admin_links(self):
kw = {"args": (self.id,)}
links = [
(_("Export all answers to CSV"), reverse("admin:docuement_set_answers_csv", **kw)),
(_("Add Docuements to this docuement set"), reverse("admin:docuement_set_add_docuements", **kw)),
(_("Update Canons to this docuement set"), reverse("admin:docuement_set_update_canons", **kw))
]
for i, (text, url) in enumerate(links):
links[i] = "<a href='%s'>%s</a>" % (url, ugettext(text))
return "<br>".join(links)
3
Example 36
def change_view(self, request, object_id, extra_context=None):
djangologdb_context = {
'djangologdb_settings': djangologdb_settings,
'aggregate': 'checksum',
'title': ugettext('View %s') % force_unicode(self.opts.verbose_name),
}
return super(LogAggregateOptions, self).change_view(request, object_id, extra_context=djangologdb_context)
3
Example 37
def send_sms(self, device, token):
body = ugettext('Your authentication token is %s') % token
self.client.sms.messages.create(
to=device.number.as_e164,
from_=getattr(settings, 'TWILIO_CALLER_ID'),
body=body)
3
Example 38
Project: djangocms-cascade Source File: widgets.py
def compile_validation_pattern(self, units=None):
"""
Assure that passed in units are valid size units, or if missing, use all possible units.
Return a tuple with a regular expression to be used for validating and an error message
in case this validation failed.
"""
if units is None:
units = list(self.POSSIBLE_UNITS)
else:
for u in units:
if u not in self.POSSIBLE_UNITS:
raise ValidationError('{} is not a valid unit for a size field'.format(u))
regex = re.compile(r'^(-?\d+)({})$'.format('|'.join(units)))
endings = (' %s ' % ugettext("or")).join("'%s'" % u.replace('%', '%%') for u in units)
params = {'label': '%(label)s', 'value': '%(value)s', 'field': '%(field)s', 'endings': endings}
return regex, self.invalid_message % params
3
Example 39
Project: shuup Source File: general.py
@contextfunction
def get_shop_language_choices(context):
languages = []
for code, name in settings.LANGUAGES:
lang_info = get_language_info(code)
name_in_current_lang = ugettext(name)
local_name = lang_info["name_local"]
languages.append((code, name_in_current_lang, local_name))
return languages
3
Example 40
Project: django-scheduler Source File: events.py
def __str__(self):
return ugettext('%(title)s: %(start)s - %(end)s') % {
'title': self.title,
'start': date(self.start, django_settings.DATE_FORMAT),
'end': date(self.end, django_settings.DATE_FORMAT),
}
3
Example 41
@formmodel_action(ugettext('Send via email'))
def dynamic_form_send_email(form_model, form):
mapped_data = form.get_mapped_data()
subject = _('Form “%(formname)s” submitted') % {'formname': form_model}
message = render_to_string('dynamic_forms/email.txt', {
'form': form_model,
'data': sorted(mapped_data.items()),
})
from_email = settings.DEFAULT_FROM_EMAIL
recipient_list = settings.DYNAMIC_FORMS_EMAIL_RECIPIENTS
send_mail(subject, message, from_email, recipient_list)
3
Example 42
def get(self, request, username, *args, **kwargs):
if request.user.username == username:
return HttpResponseBadRequest(
ugettext(u'You can\'t befriend yourself.'),
)
user = get_object_or_404(User, username=username)
self.action(request, user, *args, **kwargs)
self.set_url(request, **kwargs)
return super(BaseActionView, self).get(request, **kwargs)
3
Example 43
def as_table(self):
val = "<table><thead><tr>"
for v in self._ctags:
cell = html.escape(ugettext(v))
val += "<th>{0}</th>".format(cell)
val += "</tr></thead><tbody>"
for v in self:
val += "<tr>"
for e in v:
cell = present(e)
val += "<td>{0}</td>".format(cell)
val += "</tr>"
val += "</tbody></table>"
return val
3
Example 44
def report_error(self, conflict):
address = '<a href="%(url)s" target="_blank">%(label)s</a>' % {
'url': conflict.master.get_absolute_url(),
'label': ugettext('the conflicting object')}
error_message = ugettext('Conflicting slug. See %(address)s.') % {'address': address}
self.append_to_errors(field='slug', message=mark_safe(error_message))
3
Example 45
def invoice(self):
"""
Returns the HTML for a link to the PDF invoice for use in the
order listing view of the admin.
"""
url = reverse("shop_invoice", args=(self.id,))
text = ugettext("Download PDF invoice")
return "<a href='%s?format=pdf'>%s</a>" % (url, text)
3
Example 46
def __str__(self):
if not self.pk:
return 'featured articles'
prefix = self.app_config.get_app_title()
if self.article_count == 1:
title = ugettext('featured article')
else:
title = ugettext('featured articles: %(count)s') % {
'count': self.article_count,
}
return '{0} {1}'.format(prefix, title)
0
Example 47
Project: talk.org Source File: create_update.py
def create_object(request, model, template_name=None,
template_loader=loader, extra_context=None, post_save_redirect=None,
login_required=False, follow=None, context_processors=None):
"""
Generic object-creation function.
Templates: ``<app_label>/<model_name>_form.html``
Context:
form
the form wrapper for the object
"""
if extra_context is None: extra_context = {}
if login_required and not request.user.is_authenticated():
return redirect_to_login(request.path)
manipulator = model.AddManipulator(follow=follow)
if request.POST:
# If data was POSTed, we're trying to create a new object
new_data = request.POST.copy()
if model._meta.has_field_type(FileField):
new_data.update(request.FILES)
# Check for errors
errors = manipulator.get_validation_errors(new_data)
manipulator.do_html2python(new_data)
if not errors:
# No errors -- this means we can save the data!
new_object = manipulator.save(new_data)
if request.user.is_authenticated():
request.user.message_set.create(message=ugettext("The %(verbose_name)s was created successfully.") % {"verbose_name": model._meta.verbose_name})
# Redirect to the new object: first by trying post_save_redirect,
# then by obj.get_absolute_url; fail if neither works.
if post_save_redirect:
return HttpResponseRedirect(post_save_redirect % new_object.__dict__)
elif hasattr(new_object, 'get_absolute_url'):
return HttpResponseRedirect(new_object.get_absolute_url())
else:
raise ImproperlyConfigured("No URL to redirect to from generic create view.")
else:
# No POST, so we want a brand new form without any data or errors
errors = {}
new_data = manipulator.flatten_data()
# Create the FormWrapper, template, context, response
form = oldforms.FormWrapper(manipulator, new_data, errors)
if not template_name:
template_name = "%s/%s_form.html" % (model._meta.app_label, model._meta.object_name.lower())
t = template_loader.get_template(template_name)
c = RequestContext(request, {
'form': form,
}, context_processors)
for key, value in extra_context.items():
if callable(value):
c[key] = value()
else:
c[key] = value
return HttpResponse(t.render(c))
0
Example 48
def __init__(self, *args, **kwargs):
email_required = kwargs.pop('email_required',
app_settings.EMAIL_REQUIRED)
self.username_required = kwargs.pop('username_required',
app_settings.USERNAME_REQUIRED)
super(BaseSignupForm, self).__init__(*args, **kwargs)
username_field = self.fields['username']
username_field.max_length = get_username_max_length()
username_field.validators.append(
validators.MaxLengthValidator(username_field.max_length))
username_field.widget.attrs['maxlength'] = str(
username_field.max_length)
# field order may contain additional fields from our base class,
# so take proper care when reordering...
field_order = ['email', 'username']
if app_settings.SIGNUP_EMAIL_ENTER_TWICE:
self.fields["email2"] = forms.EmailField(
label=_("E-mail (again)"),
widget=forms.TextInput(
attrs={
'type': 'email',
'placeholder': _('E-mail address confirmation')
}
)
)
field_order = ['email', 'email2', 'username']
merged_field_order = list(self.fields.keys())
if email_required:
self.fields['email'].label = ugettext("E-mail")
self.fields['email'].required = True
else:
self.fields['email'].label = ugettext("E-mail (optional)")
self.fields['email'].required = False
self.fields['email'].widget.is_required = False
if self.username_required:
field_order = ['username', 'email']
if app_settings.SIGNUP_EMAIL_ENTER_TWICE:
field_order.append('email2')
# Merge our email and username fields in if they are not
# currently in the order. This is to allow others to
# re-arrange email and username if they desire. Go in reverse
# so that we make sure the inserted items are always
# prepended.
for field in reversed(field_order):
if field not in merged_field_order:
merged_field_order.insert(0, field)
set_form_field_order(self, merged_field_order)
if not self.username_required:
del self.fields["username"]
0
Example 49
def timesince(d, now=None):
"""
Takes two datetime objects and returns the time between d and now
as a nicely formatted string, e.g. "10 minutes". If d occurs after now,
then "0 minutes" is returned.
Units used are years, months, weeks, days, hours, and minutes.
Seconds and microseconds are ignored. Up to two adjacent units will be
displayed. For example, "2 weeks, 3 days" and "1 year, 3 months" are
possible outputs, but "2 weeks, 3 hours" and "1 year, 5 days" are not.
Adapted from http://blog.natbat.co.uk/archive/2003/Jun/14/time_since
"""
chunks = (
(60 * 60 * 24 * 365, lambda n: ungettext('year', 'years', n)),
(60 * 60 * 24 * 30, lambda n: ungettext('month', 'months', n)),
(60 * 60 * 24 * 7, lambda n : ungettext('week', 'weeks', n)),
(60 * 60 * 24, lambda n : ungettext('day', 'days', n)),
(60 * 60, lambda n: ungettext('hour', 'hours', n)),
(60, lambda n: ungettext('minute', 'minutes', n))
)
# Convert datetime.date to datetime.datetime for comparison
if d.__class__ is not datetime.datetime:
d = datetime.datetime(d.year, d.month, d.day)
if now:
t = now.timetuple()
else:
t = time.localtime()
if d.tzinfo:
tz = LocalTimezone(d)
else:
tz = None
now = datetime.datetime(t[0], t[1], t[2], t[3], t[4], t[5], tzinfo=tz)
# ignore microsecond part of 'd' since we removed it from 'now'
delta = now - (d - datetime.timedelta(0, 0, d.microsecond))
since = delta.days * 24 * 60 * 60 + delta.seconds
if since <= 0:
# d is in the future compared to now, stop processing.
return u'0 ' + ugettext('minutes')
for i, (seconds, name) in enumerate(chunks):
count = since // seconds
if count != 0:
break
s = ugettext('%(number)d %(type)s') % {'number': count, 'type': name(count)}
if i + 1 < len(chunks):
# Now get the second item
seconds2, name2 = chunks[i + 1]
count2 = (since - (seconds * count)) // seconds2
if count2 != 0:
s += ugettext(', %(number)d %(type)s') % {'number': count2, 'type': name2(count2)}
return s
0
Example 50
Project: talk.org Source File: create_update.py
def update_object(request, model, object_id=None, slug=None,
slug_field='slug', template_name=None, template_loader=loader,
extra_context=None, post_save_redirect=None,
login_required=False, follow=None, context_processors=None,
template_object_name='object'):
"""
Generic object-update function.
Templates: ``<app_label>/<model_name>_form.html``
Context:
form
the form wrapper for the object
object
the original object being edited
"""
if extra_context is None: extra_context = {}
if login_required and not request.user.is_authenticated():
return redirect_to_login(request.path)
# Look up the object to be edited
lookup_kwargs = {}
if object_id:
lookup_kwargs['%s__exact' % model._meta.pk.name] = object_id
elif slug and slug_field:
lookup_kwargs['%s__exact' % slug_field] = slug
else:
raise AttributeError("Generic edit view must be called with either an object_id or a slug/slug_field")
try:
object = model.objects.get(**lookup_kwargs)
except ObjectDoesNotExist:
raise Http404, "No %s found for %s" % (model._meta.verbose_name, lookup_kwargs)
manipulator = model.ChangeManipulator(getattr(object, object._meta.pk.attname), follow=follow)
if request.POST:
new_data = request.POST.copy()
if model._meta.has_field_type(FileField):
new_data.update(request.FILES)
errors = manipulator.get_validation_errors(new_data)
manipulator.do_html2python(new_data)
if not errors:
object = manipulator.save(new_data)
if request.user.is_authenticated():
request.user.message_set.create(message=ugettext("The %(verbose_name)s was updated successfully.") % {"verbose_name": model._meta.verbose_name})
# Do a post-after-redirect so that reload works, etc.
if post_save_redirect:
return HttpResponseRedirect(post_save_redirect % object.__dict__)
elif hasattr(object, 'get_absolute_url'):
return HttpResponseRedirect(object.get_absolute_url())
else:
raise ImproperlyConfigured("No URL to redirect to from generic create view.")
else:
errors = {}
# This makes sure the form acurate represents the fields of the place.
new_data = manipulator.flatten_data()
form = oldforms.FormWrapper(manipulator, new_data, errors)
if not template_name:
template_name = "%s/%s_form.html" % (model._meta.app_label, model._meta.object_name.lower())
t = template_loader.get_template(template_name)
c = RequestContext(request, {
'form': form,
template_object_name: object,
}, context_processors)
for key, value in extra_context.items():
if callable(value):
c[key] = value()
else:
c[key] = value
response = HttpResponse(t.render(c))
populate_xheaders(request, response, model, getattr(object, object._meta.pk.attname))
return response